[MERGE]:trunk
authorAmit Patel <apa@tinyerp.com>
Mon, 15 Oct 2012 06:21:54 +0000 (11:51 +0530)
committerAmit Patel <apa@tinyerp.com>
Mon, 15 Oct 2012 06:21:54 +0000 (11:51 +0530)
bzr revid: apa@tinyerp.com-20121015062154-9yv7a92uyf2ngv9g

163 files changed:
addons/account/account.py
addons/account/i18n/de.po
addons/account/product_view.xml
addons/account/project/report/analytic_balance.rml
addons/account/project/report/cost_ledger.rml
addons/account/project/report/inverted_analytic_balance.rml
addons/account/project/wizard/account_analytic_journal_report.py
addons/account/report/account_analytic_entries_report_view.xml
addons/account/report/account_entries_report_view.xml
addons/account/report/account_invoice_report_view.xml
addons/account/report/account_print_overdue.py
addons/account/report/account_print_overdue.rml
addons/account/report/account_treasury_report_view.xml
addons/account_analytic_plans/i18n/de.po
addons/account_asset/report/account_asset_report_view.xml
addons/account_budget/account_budget_view.xml
addons/account_check_writing/report/check_print.py
addons/account_check_writing/report/check_print_bottom.rml
addons/account_check_writing/report/check_print_middle.rml
addons/account_check_writing/report/check_print_top.rml
addons/account_followup/report/account_followup_print.py
addons/account_followup/report/account_followup_print.rml
addons/account_payment/report/order.rml
addons/account_payment/report/payment_order.py
addons/account_voucher/report/account_voucher_print.rml
addons/account_voucher/report/account_voucher_sales_receipt_view.xml
addons/audittrail/audittrail_view.xml
addons/auth_oauth/res_users.py
addons/base_import/static/src/js/import.js
addons/crm/crm_lead.py
addons/crm/crm_view.xml
addons/crm/report/crm_lead_report_view.xml
addons/crm/report/crm_phonecall_report_view.xml
addons/crm/res_config.py
addons/crm/res_config_view.xml
addons/crm_claim/__openerp__.py
addons/crm_claim/report/crm_claim_report_view.xml
addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
addons/crm_partner_assign/report/crm_lead_report_view.xml
addons/crm_partner_assign/report/crm_partner_report_view.xml
addons/document/document.py
addons/document/document_view.xml
addons/edi/controllers/main.py
addons/email_template/wizard/mail_compose_message_view.xml
addons/event/event.py
addons/event/event_view.xml
addons/event/report/report_event_registration.py
addons/event/report/report_event_registration_view.xml
addons/event/static/src/css/event.css
addons/event_sale/event_sale_view.xml
addons/google_docs/__openerp__.py
addons/google_docs/google_docs.py
addons/google_docs/res_config_user_view.xml
addons/hr/hr_view.xml
addons/hr_evaluation/report/hr_evaluation_report_view.xml
addons/hr_expense/hr_expense.py
addons/hr_expense/hr_expense_view.xml
addons/hr_expense/report/expense.rml
addons/hr_expense/report/hr_expense_report_view.xml
addons/hr_expense/security/ir.model.access.csv
addons/hr_holidays/hr_holidays_view.xml
addons/hr_payroll/report/report_contribution_register.rml
addons/hr_payroll/report/report_payslip.rml
addons/hr_payroll/report/report_payslip_details.rml
addons/hr_payroll_account/hr_payroll_account.py
addons/hr_recruitment/hr_recruitment.py
addons/hr_recruitment/hr_recruitment_view.xml
addons/hr_recruitment/report/hr_recruitment_report_view.xml
addons/hr_timesheet_invoice/hr_timesheet_invoice.py
addons/hr_timesheet_invoice/i18n/de.po
addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
addons/l10n_be/wizard/l10n_be_vat_intra_print.rml
addons/l10n_fr_hr_payroll/report/fiche_paye.rml
addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml
addons/l10n_in_hr_payroll/report/payslip_report_view.xml
addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml
addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml
addons/l10n_in_hr_payroll/report/report_payroll_advice.rml
addons/l10n_in_hr_payroll/report/report_payslip_details.rml
addons/lunch/report/order.rml
addons/mail/mail_message.py
addons/mail/mail_message_view.xml
addons/mail/mail_thread.py
addons/mail/mail_thread_view.xml
addons/mail/static/src/css/mail.css
addons/mail/static/src/css/mail_compose_message.css
addons/mail/static/src/js/mail.js
addons/mail/static/src/js/mail_followers.js
addons/mail/static/src/xml/mail.xml
addons/mail/static/src/xml/mail_followers.xml
addons/mail/tests/test_mail.py
addons/mail/wizard/mail_compose_message.py
addons/mail/wizard/mail_compose_message_view.xml
addons/marketing_campaign/report/campaign_analysis_view.xml
addons/membership/report/report_membership_view.xml
addons/mrp/__openerp__.py
addons/mrp/i18n/de.po
addons/mrp/mrp_view.xml
addons/mrp/procurement.py
addons/mrp_operations/report/mrp_workorder_analysis_view.xml
addons/mrp_repair/report/order.rml
addons/point_of_sale/point_of_sale.py
addons/point_of_sale/report/account_statement.rml
addons/point_of_sale/report/all_closed_cashbox_of_the_day.py
addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml
addons/point_of_sale/report/pos_details.rml
addons/point_of_sale/report/pos_details_summary.rml
addons/point_of_sale/report/pos_lines.rml
addons/point_of_sale/report/pos_order_report_view.xml
addons/point_of_sale/report/pos_payment_report.rml
addons/point_of_sale/report/pos_payment_report_user.rml
addons/point_of_sale/report/pos_receipt.rml
addons/point_of_sale/report/pos_users_product.rml
addons/point_of_sale/res_users_view.xml
addons/procurement/__openerp__.py
addons/procurement/procurement.py
addons/procurement/procurement_demo.xml [new file with mode: 0644]
addons/procurement/procurement_view.xml
addons/product/product.py
addons/product/product_data.xml
addons/product/product_demo.xml
addons/product/product_view.xml
addons/product_expiry/product_expiry_view.xml
addons/project/project.py
addons/project/project_view.xml
addons/project/report/project_report_view.xml
addons/project_issue/report/project_issue_report_view.xml
addons/project_mrp/project_mrp_view.xml
addons/project_mrp/project_procurement.py
addons/purchase/purchase.py
addons/purchase/purchase_demo.xml
addons/purchase/purchase_view.xml
addons/purchase/report/purchase_report_view.xml
addons/purchase_requisition/purchase_requisition_view.xml
addons/report_intrastat/report/invoice.rml
addons/report_intrastat/report_intrastat_view.xml
addons/sale/report/sale_report_view.xml
addons/sale/res_config.py
addons/sale/res_config_view.xml
addons/sale/sale.py
addons/sale/sale_view.xml
addons/sale_crm/sale_crm_view.xml
addons/sale_margin/__openerp__.py
addons/sale_margin/sale_margin_demo.xml [new file with mode: 0644]
addons/sale_stock/res_config.py
addons/sale_stock/res_config_view.xml
addons/sale_stock/sale_stock_view.xml
addons/sale_stock/stock.py
addons/stock/i18n/de.po
addons/stock/product.py
addons/stock/product_view.xml
addons/stock/report/lot_overview.rml
addons/stock/report/lot_overview_all.rml
addons/stock/report/report_stock_move_view.xml
addons/stock/report/report_stock_view.xml
addons/stock/stock.py
addons/stock/stock_demo.yml
addons/stock/stock_view.xml
addons/stock/wizard/stock_return_picking.py
addons/stock_location/procurement_pull.py
addons/stock_no_autopicking/stock_no_autopicking_view.xml
addons/warning/warning_view.xml

index ab3d065..46cfaf6 100644 (file)
@@ -300,7 +300,6 @@ class account_account(osv.osv):
             if aml_query.strip():
                 wheres.append(aml_query.strip())
             filters = " AND ".join(wheres)
-            _logger.debug('Filters: %s',(filters))
             # IN might not work ideally in case there are too many
             # children_and_consolidated, in that case join on a
             # values() e.g.:
@@ -316,7 +315,6 @@ class account_account(osv.osv):
                        " GROUP BY l.account_id")
             params = (tuple(children_and_consolidated),) + query_params
             cr.execute(request, params)
-            _logger.debug('Status: %s',(cr.statusmessage))
 
             for row in cr.dictfetchall():
                 accounts[row['id']] = row
index 38e567b..ee0edf0 100644 (file)
@@ -7,14 +7,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 6.0dev\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-06-25 09:07+0000\n"
+"PO-Revision-Date: 2012-10-12 23:18+0000\n"
 "Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:10+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-14 04:39+0000\n"
+"X-Generator: Launchpad (build 16137)\n"
 
 #. module: account
 #: view:account.invoice.report:0
@@ -25,7 +25,7 @@ msgstr "letzten Monat"
 #. module: account
 #: model:process.transition,name:account.process_transition_supplierreconcilepaid0
 msgid "System payment"
-msgstr "Zahlungssystematik"
+msgstr "Zahlungsmothode"
 
 #. module: account
 #: view:account.journal:0
@@ -39,7 +39,7 @@ msgid ""
 "Generic Reporting \\ Taxes \\ Taxes Report'"
 msgstr ""
 "Legen Sie die Reihenfolge der Anzeige im Report 'Finanz \\ Berichte \\ "
-"generische Reports \\ Steuern \\ Steuererklärung' fest"
+"Allgemeine Berichte \\ Steuern \\ Steuererklärung' fest"
 
 #. module: account
 #: view:account.move.reconcile:0
@@ -57,12 +57,12 @@ msgstr "Statistische Auswertungen"
 #. module: account
 #: view:account.invoice:0
 msgid "Proforma/Open/Paid Invoices"
-msgstr "Proforoma/Offene/Bezahlte Rechnungen"
+msgstr "Proforma / offene bzw. bezahlte Rechnungen"
 
 #. module: account
 #: field:report.invoice.created,residual:0
 msgid "Residual"
-msgstr "Restwert"
+msgstr "Verbleibend"
 
 #. module: account
 #: constraint:account.period:0
@@ -72,7 +72,7 @@ msgstr "Fehler! Die Dauer der Periode(n) ist ungültig "
 #. module: account
 #: field:account.analytic.line,currency_id:0
 msgid "Account currency"
-msgstr "Währung"
+msgstr "Währung des Kontos"
 
 #. module: account
 #: view:account.tax:0
@@ -83,7 +83,7 @@ msgstr "Definition untergeordneter Steuern"
 #: code:addons/account/account_bank_statement.py:302
 #, python-format
 msgid "Journal item \"%s\" is not valid."
-msgstr "Journalzeile \"%s\" ist ungültig"
+msgstr "Buchung \"%s\" ist ungültig"
 
 #. module: account
 #: model:ir.model,name:account.model_report_aged_receivable
@@ -103,7 +103,7 @@ msgstr "wizard.multi.charts.accounts"
 #. module: account
 #: view:account.move:0
 msgid "Total Debit"
-msgstr "Summe Soll"
+msgstr "Forderungsgesamtsumme"
 
 #. module: account
 #: view:account.unreconcile:0
@@ -111,7 +111,7 @@ msgid ""
 "If you unreconciliate transactions, you must also verify all the actions "
 "that are linked to those transactions because they will not be disabled"
 msgstr ""
-"Wenn Sie Zahlungen stornieren, sollten Sie alle zugehörigen Belege und "
+"Wenn Sie Zahlungen stornieren, müssen Sie alle zugehörigen Belege und "
 "Buchungen prüfen, da diese nicht automatisch mit gelöscht oder deaktiviert "
 "werden."
 
@@ -122,13 +122,13 @@ msgid ""
 "accounts too."
 msgstr ""
 "Konfigurationsfehler! Die gewählte Währung muss auch bei den Standardkonten "
-"verwendet werden"
+"verwendet werden."
 
 #. module: account
 #: report:account.invoice:0
 #: field:account.invoice.line,origin:0
 msgid "Origin"
-msgstr "Bezug"
+msgstr "Herkunft"
 
 #. module: account
 #: view:account.account:0
@@ -137,7 +137,7 @@ msgstr "Bezug"
 #: view:account.move.line.reconcile:0
 #: view:account.move.line.reconcile.writeoff:0
 msgid "Reconcile"
-msgstr "Ausgleich Nummer"
+msgstr "Ausgleich von Offenen Posten"
 
 #. module: account
 #: field:account.bank.statement.line,ref:0
@@ -146,6 +146,7 @@ msgstr "Ausgleich Nummer"
 #: field:account.move,ref:0
 #: field:account.move.line,ref:0
 #: field:account.subscription,ref:0
+#: xsl:account.transfer:0
 msgid "Reference"
 msgstr "Referenz"
 
@@ -164,13 +165,13 @@ msgstr ""
 "angezeigt."
 
 #. module: account
-#: code:addons/account/account_invoice.py:1428
+#: code:addons/account/account_invoice.py:1430
 #, python-format
 msgid "Warning!"
 msgstr "Achtung!"
 
 #. module: account
-#: code:addons/account/account.py:3112
+#: code:addons/account/account.py:3129
 #, python-format
 msgid "Miscellaneous Journal"
 msgstr "\"verschiedenes\" Journal"
@@ -195,7 +196,7 @@ msgstr "Spaltenbeschriftung"
 #: code:addons/account/wizard/account_move_journal.py:95
 #, python-format
 msgid "Journal: %s"
-msgstr "Journal: %s"
+msgstr "Journal %s"
 
 #. module: account
 #: help:account.analytic.journal,type:0
@@ -204,16 +205,16 @@ msgid ""
 "invoice) to create analytic entries, OpenERP will look for a matching "
 "journal of the same type."
 msgstr ""
-"Definiert Typ für das analytische Journal. Wenn ein Beleg (z.B. eine "
-"Rechnung) dann zusätzlich zu den Finanzbuchungen weitere analytische "
-"Buchungen erzeugen soll , prüft OpenERP inwieweit ein analytisches Journal "
-"mit  dem identischem Typ (z.B. Verkauf) existiert."
+"Definiert die Art des analytischen Journals. Wenn ein Beleg (z. B. eine "
+"Rechnung), zusätzlich zu den Finanzbuchungen, weitere analytische Buchungen "
+"erzeugen soll, prüft OpenERP ob ein analytischer Bericht der gleichen Art "
+"(z.B. Verkauf) vorliegt."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_tax_template_form
 #: model:ir.ui.menu,name:account.menu_action_account_tax_template_form
 msgid "Tax Templates"
-msgstr "Umsatzsteuer Vorlagen"
+msgstr "-Vorlagen für Steuerkonten"
 
 #. module: account
 #: model:ir.model,name:account.model_account_tax
@@ -232,16 +233,14 @@ msgid ""
 "Check this box if you don't want any VAT related to this Tax Code to appear "
 "on invoices"
 msgstr ""
-"Aktivieren, wenn KEINE umsatzsteuerlich relevanten Bezeichnungen auf der "
-"Rechnung erscheinen sollen"
+"Aktivieren, wenn etwaige, in diesen Steuerschlüssel einbezogene, "
+"Steuerbeträge auf der Rechnung nicht erscheinen sollen"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1241
+#: code:addons/account/account_invoice.py:1254
 #, python-format
 msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
-msgstr ""
-"Rechnung '%s' ist teilweise bezahlt: %s%s von %s%s (%s%s verbleiben als "
-"offen)"
+msgstr "Rechnung '%s' ist teilweise bezahlt: %s%s von %s%s (%s%s verbleiben)"
 
 #. module: account
 #: model:process.transition,note:account.process_transition_supplierentriesreconcile0
@@ -254,12 +253,12 @@ msgid "Belgian Reports"
 msgstr "Auswertungen für Belgien"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1200
+#: code:addons/account/account_move_line.py:1215
 #, python-format
 msgid "You can not add/modify entries in a closed journal."
 msgstr ""
 "Sie können in einem abgeschlossenen Journal keine Buchung vornehmen oder "
-"ändern ."
+"ändern."
 
 #. module: account
 #: help:account.account,user_type:0
@@ -269,13 +268,13 @@ msgid ""
 "entries."
 msgstr ""
 "Der Kontentyp hat Informationscharakter und wird verwendet, um "
-"länderspezifsche Reports zu generieren sowie um den Jahresabschluss zu "
-"steuern und Eröffnungsbilanzbuchungen zu generieren"
+"länderspezifsche Berichte zu generieren sowie den Jahresabschluss zu steuern "
+"und Eröffnungsbilanzbuchungen zu generieren"
 
 #. module: account
 #: report:account.overdue:0
 msgid "Sub-Total :"
-msgstr "Zwischensumme"
+msgstr "Zwischensumme:"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
@@ -287,7 +286,7 @@ msgstr "Wiederkehrende Buchungen (Manuell)"
 #. module: account
 #: view:account.fiscalyear.close.state:0
 msgid "Close Fiscalyear"
-msgstr "Beende Geschäftsjahr"
+msgstr "Geschäftsjahr abschließen"
 
 #. module: account
 #: field:account.automatic.reconcile,allow_write_off:0
@@ -297,7 +296,7 @@ msgstr "Erlaube Abschreibung"
 #. module: account
 #: view:account.analytic.chart:0
 msgid "Select the Period for Analysis"
-msgstr "Auswahl Periode"
+msgstr "Periode zur Analyse auswählen"
 
 #. module: account
 #: view:account.move.line:0
@@ -305,16 +304,17 @@ msgid "St."
 msgstr "Beleg"
 
 #. module: account
-#: code:addons/account/account_invoice.py:551
+#: code:addons/account/account_invoice.py:560
 #, python-format
 msgid "Invoice line account company does not match with invoice company."
 msgstr ""
-"Unternehmen (Mandant) ist bei  Rechnung und Rechnungszeile nicht identisch."
+"Das Kundenkonto ist einem anderen Unternehmen (Mandant) zugewiesen als der "
+"Rechnungssteller."
 
 #. module: account
 #: field:account.journal.column,field:0
 msgid "Field Name"
-msgstr "Bezeichnung Feld"
+msgstr "Feldname"
 
 #. module: account
 #: help:account.installer,charts:0
@@ -322,8 +322,8 @@ msgid ""
 "Installs localized accounting charts to match as closely as possible the "
 "accounting needs of your company based on your country."
 msgstr ""
-"Installiert Kontenplan für Ihr Land, um soweit wie möglich eine Vorlage für "
-"Ihr Unternehmen zu bieten."
+"Installiert landesspezifische Kontenpläne, um soweit wie möglich den Bedarf "
+"Ihres Unternehmens abzudecken."
 
 #. module: account
 #: code:addons/account/wizard/account_move_journal.py:63
@@ -334,10 +334,10 @@ msgid ""
 "You can create one in the menu: \n"
 "Configuration/Financial Accounting/Accounts/Journals."
 msgstr ""
-"Konnte kein Journal mit dem Typ %s für Unternehmen finden.\n"
+"Konnte kein Journal mit dem Typ %s für dieses Unternehmen finden.\n"
 "\n"
-"Sie können ein Journal definieren:\n"
-"Konfiguration/Finanzbuchhaltung/Finanzkonten/Journale"
+"Hier können Sie einen Bericht anlegen:\n"
+"Finanzen / Konfiguration / Finanzen / Buchungsjournale"
 
 #. module: account
 #: model:ir.model,name:account.model_account_unreconcile
@@ -364,7 +364,7 @@ msgstr ""
 #. module: account
 #: view:account.installer:0
 msgid "Configure"
-msgstr "Konfigurieren"
+msgstr "Einrichten"
 
 #. module: account
 #: selection:account.entries.report,month:0
@@ -389,7 +389,7 @@ msgstr ""
 #. module: account
 #: constraint:account.move.line:0
 msgid "You can not create journal items on an account of type view."
-msgstr "You can not create journal items on an account of type view."
+msgstr "Sie können keine Buchungen in einem Ansichtskonto vornehmen."
 
 #. module: account
 #: model:ir.model,name:account.model_account_tax_template
@@ -405,7 +405,7 @@ msgstr "account.bank.accounts.wizard"
 #: field:account.move.line,date_created:0
 #: field:account.move.reconcile,create_date:0
 msgid "Creation date"
-msgstr "Erzeugt am"
+msgstr "Erstellungsdatum"
 
 #. module: account
 #: selection:account.journal,type:0
@@ -433,19 +433,19 @@ msgid ""
 "This field contains the informatin related to the numbering of the journal "
 "entries of this journal."
 msgstr ""
-"Dieses Feld enthält die Sequenz für die Buchungen in diesem Journal. "
-"Hierdurch kann dann die chronologische Reihenfolge der Buchungen "
-"nachvollzogen werden."
+"Dieses Feld enthält beschreibt die Nummerierung für die Buchungen in diesem "
+"Journal. Hierdurch kann dann die chronologische Reihenfolge der Buchungen "
+"sichergestellt werden."
 
 #. module: account
 #: field:account.journal,default_debit_account_id:0
 msgid "Default Debit Account"
-msgstr "Standard Sollkonto"
+msgstr "Standard Debitorenkonto"
 
 #. module: account
 #: view:account.move:0
 msgid "Total Credit"
-msgstr "Summe Haben"
+msgstr "Habensumme"
 
 #. module: account
 #: view:account.move.line.unreconcile.select:0
@@ -463,7 +463,7 @@ msgstr "Kontenplan Vorlage"
 #. module: account
 #: help:account.model.line,amount_currency:0
 msgid "The amount expressed in an optional other currency."
-msgstr "Der optionale Betrag in anderer Währung"
+msgstr "In alternativer Währung dargestellter Betrag"
 
 #. module: account
 #: field:accounting.report,enable_filter:0
@@ -477,10 +477,10 @@ msgid ""
 "it comes to 'Printed' state. When all transactions are done, it comes in "
 "'Done' state."
 msgstr ""
-"Bei Erstellung einer Periode für das Journal ist der Status 'Entwurf'. Wenn "
-"dann ein Report für das Journal ausgedruckt wird, wechselt der Status auf "
-"'Gedruckt'. Auf 'Fertig' wechselt dann der Status, wenn alle erforderlichen "
-"Transaktionen hierzu erledigt sind."
+"Bei Erstellung einer Periode für den Bericht ist dieser im Zustand "
+"'Entwurf'. Wenn der Bericht ausgedruckt wird,  wechselt der Status auf "
+"\"Gedruckt\". Auf 'Fertig' wechselt dann der Status, wenn alle Transaktionen "
+"hierzu abgschlossen sind."
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_tax_chart
@@ -490,11 +490,11 @@ msgid ""
 "amount of each area of the tax declaration for your country. It’s presented "
 "in a hierarchical structure, which can be modified to fit your needs."
 msgstr ""
-"Der Kontenplan Umsatzsteuer ist eine hierachische Ansicht der Steuern Ã¼ber "
-"mehrere Dimensionen. Angezeigt wird nicht nur die Struktur der Steuern, "
-"sondern auch die  aktuellen Verkehrszahlen der jeweiligen Steuern für den "
-"Monat und kummuliert für das Jahr. Die hierachische Struktur kann für Ihren "
-"Bedarf angepasst werden."
+"Der Steuer-Kontenplan ist eine hierachische Ansicht der Steuern Ã¼ber mehrere "
+"Ebenen. Angezeigt werden nicht nur die Struktur der Steuern, sondern auch "
+"die  aktuellen Verkehrszahlen der jeweiligen Steuern für den Monat und "
+"kummuliert für das Jahr. Die hierachische Struktur kann Ihrem Bedarf "
+"angepasst werden."
 
 #. module: account
 #: view:account.analytic.line:0
@@ -529,7 +529,7 @@ msgstr "Journal"
 #. module: account
 #: model:ir.model,name:account.model_account_invoice_confirm
 msgid "Confirm the selected invoices"
-msgstr "Bestätige die ausgewählten Rechnungen"
+msgstr "Ausgewählte Rechnungen bestätigen"
 
 #. module: account
 #: field:account.addtmpl.wizard,cparent_id:0
@@ -557,12 +557,12 @@ msgstr "Finanzkonto für dieses Journal"
 #: help:account.vat.declaration,chart_account_id:0
 #: help:accounting.report,chart_account_id:0
 msgid "Select Charts of Accounts"
-msgstr "Wähle Kontenplan"
+msgstr "Kontenplan wählen"
 
 #. module: account
 #: sql_constraint:res.company:0
 msgid "The company name must be unique !"
-msgstr "Der Name der Firma darf nur einmal vorkommen!"
+msgstr "Der Unternehmensname muss eindeutig sein!"
 
 #. module: account
 #: model:ir.model,name:account.model_account_invoice_refund
@@ -577,7 +577,7 @@ msgstr "Limit"
 #. module: account
 #: field:account.automatic.reconcile,unreconciled:0
 msgid "Not reconciled transactions"
-msgstr "Nicht ausgeglichene Posten"
+msgstr "Unausgeglichener Geschäftsvorgang"
 
 #. module: account
 #: report:account.general.ledger:0
@@ -590,13 +590,13 @@ msgstr "Gegenbuchung"
 #: field:account.fiscal.position,tax_ids:0
 #: field:account.fiscal.position.template,tax_ids:0
 msgid "Tax Mapping"
-msgstr "Steuer Zuordnung"
+msgstr "Steuerzuordnung"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_fiscalyear_close_state
 #: model:ir.ui.menu,name:account.menu_wizard_fy_close_state
 msgid "Close a Fiscal Year"
-msgstr "Beende Geschäftsjahr"
+msgstr "Geschäftsjahr abschließen"
 
 #. module: account
 #: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
@@ -604,8 +604,10 @@ msgid "The accountant confirms the statement."
 msgstr "Der Buchhalter bestätigt den Bankauszug."
 
 #. module: account
+#: report:account.account.balance:0
 #: selection:account.balance.report,display_account:0
 #: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
 #: selection:account.report.general.ledger,display_account:0
 #: selection:account.tax,type_tax_use:0
 #: selection:account.tax.template,type_tax_use:0
@@ -646,12 +648,12 @@ msgstr "Sequenzen"
 #: field:account.financial.report,account_report_id:0
 #: selection:account.financial.report,type:0
 msgid "Report Value"
-msgstr "Bericht Wert"
+msgstr "Berichtswert"
 
 #. module: account
 #: view:account.fiscal.position.template:0
 msgid "Taxes Mapping"
-msgstr "Steuern Zuordnung"
+msgstr "Steuerzuordnung"
 
 #. module: account
 #: report:account.central.journal:0
@@ -661,10 +663,11 @@ msgstr "Zentraljournal"
 #. module: account
 #: sql_constraint:account.sequence.fiscalyear:0
 msgid "Main Sequence must be different from current !"
-msgstr "Die Hauptsequenz sollte sich von der derzeitigen unterscheiden !"
+msgstr ""
+"Die Ã¼bergeordnete Nummerierung muss sich von der derzeitigen unterscheiden!"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1251
+#: code:addons/account/account_move_line.py:1266
 #, python-format
 msgid "No period found or more than one period found for the given date."
 msgstr "Keine oder meherere Perioden für dieses Datum gefunden."
@@ -675,7 +678,7 @@ msgid "Tax Code Amount"
 msgstr "Steuerbetrag"
 
 #. module: account
-#: code:addons/account/account.py:3116
+#: code:addons/account/account.py:3133
 #, python-format
 msgid "SAJ"
 msgstr "VK"
@@ -684,26 +687,26 @@ msgstr "VK"
 #: view:account.period:0
 #: view:account.period.close:0
 msgid "Close Period"
-msgstr "Periode beenden"
+msgstr "Periode abschließen"
 
 #. module: account
 #: model:ir.model,name:account.model_account_common_partner_report
 msgid "Account Common Partner Report"
-msgstr "Auswertung Partnerkonto"
+msgstr "Auswertung Partnerkonto (Sammelkonto)"
 
 #. module: account
 #: field:account.fiscalyear.close,period_id:0
 msgid "Opening Entries Period"
-msgstr "Start Periode im neuen Geschäftsjahr"
+msgstr "Startbuchungen der Periode"
 
 #. module: account
 #: model:ir.model,name:account.model_account_journal_period
 msgid "Journal Period"
-msgstr "Journal Periode"
+msgstr "Berichtsperiode"
 
 #. module: account
-#: code:addons/account/account_move_line.py:750
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:766
+#: code:addons/account/account_move_line.py:819
 #, python-format
 msgid "To reconcile the entries company should be the same for all entries"
 msgstr ""
@@ -716,18 +719,18 @@ msgid ""
 "The date of your Journal Entry is not in the defined period! You should "
 "change the date or remove this constraint from the journal."
 msgstr ""
-"The date of your Journal Entry is not in the defined period! You should "
-"change the date or remove this constraint from the journal."
+"Das Datum Ihrer Buchung fällt nicht in die festgelegte Periode. Sie müssen "
+"das Datum anpassen, oder diese Einschränkung vom Bericht entfernen."
 
 #. module: account
 #: model:ir.model,name:account.model_account_report_general_ledger
 msgid "General Ledger Report"
-msgstr "Kontoauszug und Saldenliste"
+msgstr "Umsätze nach Konten und Perioden"
 
 #. module: account
 #: view:account.invoice:0
 msgid "Re-Open"
-msgstr "Wiederöffnen"
+msgstr "Wiedereröffnen"
 
 #. module: account
 #: view:account.use.model:0
@@ -747,16 +750,15 @@ msgstr "Heute ausgeglichene Partner"
 #. module: account
 #: view:report.hr.timesheet.invoice.journal:0
 msgid "Sale journal in this year"
-msgstr "Verkaufsjournal dieses Jshres"
+msgstr "Verkaufsbericht dieses Jahres"
 
 #. module: account
 #: selection:account.financial.report,display_detail:0
 msgid "Display children with hierarchy"
-msgstr "Zeige Kinder abhängige in der Hierarchie"
+msgstr "Zeige Hierarchie der Kinder"
 
 #. module: account
 #: selection:account.payment.term.line,value:0
-#: selection:account.tax.template,type:0
 msgid "Percent"
 msgstr "Prozent"
 
@@ -781,9 +783,10 @@ msgstr "Gutschriftmethode"
 #: code:addons/account/wizard/account_change_currency.py:38
 #, python-format
 msgid "You can only change currency for Draft Invoice !"
-msgstr "Sie können die Währung nur bei Rechnungen"
+msgstr "Sie können die Währung nur bei Rechnungsentwürfen Ã¤ndern"
 
 #. module: account
+#: model:ir.actions.report.xml,name:account.account_financial_report
 #: model:ir.ui.menu,name:account.menu_account_report
 msgid "Financial Report"
 msgstr "Finanzbericht"
@@ -799,12 +802,13 @@ msgstr "Finanzbericht"
 #: view:account.journal:0
 #: field:account.journal,type:0
 #: field:account.move.reconcile,type:0
+#: xsl:account.transfer:0
 #: field:report.invoice.created,type:0
 msgid "Type"
 msgstr "Typ"
 
 #. module: account
-#: code:addons/account/account_invoice.py:738
+#: code:addons/account/account_invoice.py:747
 #, python-format
 msgid ""
 "Taxes are missing!\n"
@@ -826,7 +830,7 @@ msgstr "Referenz des Partners für diese Rechnung."
 #. module: account
 #: view:account.invoice.report:0
 msgid "Supplier Invoices And Refunds"
-msgstr "Lieferanten Rechnungen und Gutschriften"
+msgstr "Lieferantenrechnungen und -gutschriften"
 
 #. module: account
 #: view:account.move.line.unreconcile.select:0
@@ -834,7 +838,7 @@ msgstr "Lieferanten Rechnungen und Gutschriften"
 #: view:account.unreconcile.reconcile:0
 #: model:ir.model,name:account.model_account_move_line_unreconcile_select
 msgid "Unreconciliation"
-msgstr "Storno Ausgleich Offene Posten"
+msgstr "Stornierung des OP-Ausgleichs"
 
 #. module: account
 #: view:account.payment.term.line:0
@@ -864,10 +868,10 @@ msgid ""
 "or Loss you'd realized if those transactions were ended today. Only for "
 "accounts having a secondary currency set."
 msgstr ""
-"Bei Transaktionen mit mehreren Währungen fallen ggf. Währungsgewinne oder "
-"Verluste an. Dieses Menü gibt Ihnen einen Ãœberblick Ã¼ber Gewinne und "
-"Verluste, wenn diese heute realisiert würden. Nur für Konten mit definierter "
-"2.Währung."
+"Bei Geschäftsvorfällen mit mehreren Währungen fallen ggf. Währungsgewinne "
+"oder -verluste an. Dieses Menü gibt Ihnen einen Ãœberblick Ã¼ber Gewinne und "
+"Verluste, wenn diese heute realisiert würden. Betrifft nur Konten mit "
+"Alternativwährung."
 
 #. module: account
 #: selection:account.entries.report,month:0
@@ -887,7 +891,7 @@ msgstr "Tage"
 #: help:account.account.template,nocreate:0
 msgid ""
 "If checked, the new chart of accounts will not contain this by default."
-msgstr "Bei Aktivierung, ist dieses nicht im neuen Kontenplan beiinhaltet."
+msgstr "Bei Aktivierung, ist dieses nicht im neuen Kontenplan enthalten."
 
 #. module: account
 #: code:addons/account/wizard/account_invoice_refund.py:110
@@ -896,9 +900,8 @@ msgid ""
 "Can not %s invoice which is already reconciled, invoice should be "
 "unreconciled first. You can only Refund this invoice"
 msgstr ""
-"Kann keine Rechnung %s erzeugen, die bereits ausgeglichen wurde, hierzu muss "
-"die Zahlung zuerst storniert werden. Sie können lediglich diese Rechnung "
-"ausgleichen."
+"Kann eine bereits beglichene Rechnung nicht %s, dazu muss die Zahlung "
+"zunächst storniert werden. Sie können diese Rechnung lediglich rückerstatten."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_subscription_form_new
@@ -924,7 +927,7 @@ msgstr "Werte"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,delay_to_pay:0
 msgid "Avg. Delay To Pay"
-msgstr "Durch. Zahlungsdauer"
+msgstr "Mittlerer Zahlungsverzug"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_tax_chart
@@ -936,15 +939,16 @@ msgstr "Kontenplan Umsatzsteuer"
 #. module: account
 #: view:account.fiscalyear:0
 msgid "Create 3 Months Periods"
-msgstr "Erzeuge 3 Monats Periode"
+msgstr "Lege Quartal an"
 
 #. module: account
+#: report:account.aged_trial_balance:0
 #: report:account.overdue:0
 msgid "Due"
 msgstr "Fällig"
 
 #. module: account
-#: code:addons/account/account.py:1345
+#: code:addons/account/account.py:1353
 #, python-format
 msgid ""
 "You cannot validate this journal entry because account \"%s\" does not "
@@ -960,8 +964,8 @@ msgid ""
 "This account does not allow reconciliation! You should update the account "
 "definition to change this."
 msgstr ""
-"Dieses Konto kann nicht ausgeziffert werden. Sie können dies jedoch om Konto "
-"einstellen."
+"Dieses Konto erlaubt keinen Ausgleich. Sie können jedoch die Konto-"
+"Einstellungen diesbezüglich Ã¤ndern."
 
 #. module: account
 #: view:account.invoice:0
@@ -995,7 +999,7 @@ msgstr "Verbindlichkeit"
 #. module: account
 #: view:account.entries.report:0
 msgid "Extended Filters..."
-msgstr "Erweiterter Filter..."
+msgstr "Erweiterte Filter..."
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_account_central_journal
@@ -1005,12 +1009,12 @@ msgstr "Zentrales Buchungsjournal"
 #. module: account
 #: selection:account.journal,type:0
 msgid "Sale Refund"
-msgstr "Gutschrift Verkauf"
+msgstr "Rückerstattung aus Verkauf"
 
 #. module: account
 #: model:process.node,note:account.process_node_accountingstatemententries0
 msgid "Bank statement"
-msgstr "Bank Auszug"
+msgstr "Bankauszug"
 
 #. module: account
 #: field:account.analytic.line,move_id:0
@@ -1030,7 +1034,7 @@ msgstr ""
 "dann die Basis für die Steuerberechnung ist."
 
 #. module: account
-#: code:addons/account/account.py:2596
+#: code:addons/account/account.py:2613
 #, python-format
 msgid "I can not locate a parent code for the template account!"
 msgstr "Finde keinen Code für das Ã¼bergeordnete Vorlagekonto"
@@ -1060,17 +1064,17 @@ msgstr "Buchungsvorlage"
 #: report:account.partner.balance:0
 #: field:account.period,code:0
 msgid "Code"
-msgstr "Kurzbezeichnung"
+msgstr "Kurzbez."
 
 #. module: account
-#: code:addons/account/account.py:2268
+#: code:addons/account/account.py:2285
 #: code:addons/account/account_bank_statement.py:357
 #: code:addons/account/account_invoice.py:73
-#: code:addons/account/account_invoice.py:688
+#: code:addons/account/account_invoice.py:697
 #: code:addons/account/account_move_line.py:173
 #, python-format
 msgid "No Analytic Journal !"
-msgstr "Kein Analytisches Journal!"
+msgstr "Kein Analytischer Bericht!"
 
 #. module: account
 #: report:account.partner.balance:0
@@ -1084,23 +1088,23 @@ msgstr "Partner Saldenliste"
 #. module: account
 #: field:account.bank.accounts.wizard,acc_name:0
 msgid "Account Name."
-msgstr "Konto Bezeichnung"
+msgstr "Kontobezeichnung"
 
 #. module: account
 #: field:account.chart.template,property_reserve_and_surplus_account:0
 #: field:res.company,property_reserve_and_surplus_account:0
 msgid "Reserve and Profit/Loss Account"
-msgstr "Konto für vorläufigen Gewinn / Verlust"
+msgstr "Konto für Rücklagen und vorläufigen Gewinn / Verlust"
 
 #. module: account
 #: field:report.account.receivable,name:0
 msgid "Week of Year"
-msgstr "Woche eines Jahres"
+msgstr "Kalenderwoche (KW)"
 
 #. module: account
 #: field:account.report.general.ledger,landscape:0
 msgid "Landscape Mode"
-msgstr "Ãœberblick"
+msgstr "Querformat"
 
 #. module: account
 #: code:addons/account/account.py:645
@@ -1109,17 +1113,18 @@ msgid ""
 "You cannot change the type of account from '%s' to '%s' type as it contains "
 "journal items!"
 msgstr ""
-"Sie können den Typ des Kontos mit Buchungen nicht von '%s' auf '%s' Ã¤ndern."
+"Sie können den Typ des Kontos nicht von '%s' auf '%s' Ã¤ndern, da es "
+"Buchungen enthält."
 
 #. module: account
 #: field:account.report.general.ledger,sortby:0
 msgid "Sort by"
-msgstr "Sortiere nach"
+msgstr "Sortieren nach"
 
 #. module: account
 #: help:account.fiscalyear.close,fy_id:0
 msgid "Select a Fiscal year to close"
-msgstr "Wähle zu beendendes Geschäftsjahr"
+msgstr "Wählen Sie das abzuschließende Geschäftsjahr"
 
 #. module: account
 #: help:account.account.template,user_type:0
@@ -1128,11 +1133,11 @@ msgid ""
 "information about the account and its specificities."
 msgstr ""
 "Die Kontotypen wurden für die Abbildung von regionalen Besonderheiten "
-"definiert. Hierdurch können Sie Ihre landestypischen Konto(art)typen "
+"definiert. Hierdurch können Sie Ihre landestypischen Kontoarten/-typen "
 "definieren."
 
 #. module: account
-#: code:addons/account/account_move_line.py:842
+#: code:addons/account/account_move_line.py:856
 #, python-format
 msgid ""
 "You have to provide an account for the write off/exchange difference entry !"
@@ -1147,7 +1152,7 @@ msgstr "Anwendbare Optionen"
 #. module: account
 #: report:account.partner.balance:0
 msgid "In dispute"
-msgstr "Nn Vollstreckung"
+msgstr "In Anfechtung"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_view_bank_statement_tree
@@ -1171,17 +1176,17 @@ msgstr "Verantwortl. Mitarbeiter"
 #. module: account
 #: view:account.subscription.generate:0
 msgid "Generate Entries before:"
-msgstr "Buche alle wiederkehrenden Buchungen vor dem:"
+msgstr "Anlegen der wiederkehrenden Buchungen vor dem:"
 
 #. module: account
 #: view:account.move.line:0
 msgid "Unbalanced Journal Items"
-msgstr "OP Buchungen"
+msgstr "Unausgeglichene Buchungen"
 
 #. module: account
 #: model:account.account.type,name:account.data_account_type_bank
 #: selection:account.bank.accounts.wizard,account_type:0
-#: code:addons/account/account.py:3003
+#: code:addons/account/account.py:3020
 #, python-format
 msgid "Bank"
 msgstr "Bank"
@@ -1189,7 +1194,7 @@ msgstr "Bank"
 #. module: account
 #: field:account.period,date_start:0
 msgid "Start of Period"
-msgstr "Beginn der Periode"
+msgstr "Periodenbeginn"
 
 #. module: account
 #: model:process.transition,name:account.process_transition_confirmstatementfromdraft0
@@ -1202,13 +1207,14 @@ msgid ""
 "Total amount (in Secondary currency) for transactions held in secondary "
 "currency for this account."
 msgstr ""
-"Gesamtbetrag der Buchungen dieses Kontos in der definierten 2.Währung"
+"Gesamtbetrag der Buchungen in Alternativwährung in der Alternativwährung "
+"dieses Kontos ausgegeben."
 
 #. module: account
 #: field:account.fiscal.position.tax,tax_dest_id:0
 #: field:account.fiscal.position.tax.template,tax_dest_id:0
 msgid "Replacement Tax"
-msgstr "Steuer Zuordnung"
+msgstr "Steuerzuordnung"
 
 #. module: account
 #: selection:account.move.line,centralisation:0
@@ -1218,7 +1224,7 @@ msgstr "Haben Zentralisierung"
 #. module: account
 #: view:report.account_type.sales:0
 msgid "All Months Sales by type"
-msgstr "Alle Verkäufe nach Typ"
+msgstr "Alle Verkäufe des Monats nach Typ"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_invoice_tree2
@@ -1230,15 +1236,15 @@ msgid ""
 msgstr ""
 "Ãœber das Menü Eingangsrechnungen können Sie Rechnungen Ihrer Lieferanten "
 "eingeben und verwalten. OpenERP kann ausserdem automatisch Rechnungsentwürfe "
-"aus Beschaffungsaufträgen erzeugen. Ãœber diesen Weg können Sie nicht nur den "
-"Zeitpunkt der Rechnungserstellung steuern, sondern auch ob bestellte oder "
-"gelieferte Mengen beim Rechnungsentwurf berücksichtigt werden sollen."
+"aus Beschaffungsaufträgen oder Lieferscheinen erzeugen. Somit können Sie die "
+"Eingangsrechnung mit Ihrem Bestellauftrag und der tatsächlichen Lieferung "
+"überprüfen."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_tax_code_template_form
 #: model:ir.ui.menu,name:account.menu_action_account_tax_code_template_form
 msgid "Tax Code Templates"
-msgstr "Steuerausweis Vorlagen"
+msgstr "Steuerausweis-Vorlagen"
 
 #. module: account
 #: view:account.invoice.cancel:0
@@ -1253,7 +1259,7 @@ msgstr "Dieser Code wird auf Berichten angezeigt"
 #. module: account
 #: view:account.tax.template:0
 msgid "Taxes used in Purchases"
-msgstr "Steuern für Einkäufe"
+msgstr "Steuern aus Einkäufen (Vorsteuern)"
 
 #. module: account
 #: field:account.invoice.tax,tax_code_id:0
@@ -1261,12 +1267,12 @@ msgstr "Steuern für Einkäufe"
 #: field:account.tax.template,tax_code_id:0
 #: model:ir.model,name:account.model_account_tax_code
 msgid "Tax Code"
-msgstr "Steuer"
+msgstr "Steuerschlüssel"
 
 #. module: account
 #: field:account.account,currency_mode:0
 msgid "Outgoing Currencies Rate"
-msgstr "Wechselkurse"
+msgstr "Wechselkurs (Verkauf)"
 
 #. module: account
 #: selection:account.analytic.journal,type:0
@@ -1276,10 +1282,10 @@ msgstr "Situation"
 #. module: account
 #: help:account.move.line,move_id:0
 msgid "The move of this entry line."
-msgstr "Der Buchungssatz dieser Buchungszeile."
+msgstr "Der Buchungssatz dieser Buchungs."
 
 #. module: account
-#: code:addons/account/account_move_line.py:1302
+#: code:addons/account/account_move_line.py:1317
 #, python-format
 msgid ""
 "You can not use this general account in this journal, check the tab 'Entry "
@@ -1291,7 +1297,7 @@ msgstr ""
 #. module: account
 #: field:account.move.line.reconcile,trans_nbr:0
 msgid "# of Transaction"
-msgstr "# Transaktionen"
+msgstr "Transaktionsnummer"
 
 #. module: account
 #: report:account.general.ledger:0
@@ -1302,18 +1308,18 @@ msgid "Entry Label"
 msgstr "Buchungstext"
 
 #. module: account
-#: code:addons/account/account.py:1129
+#: code:addons/account/account.py:1136
 #, python-format
 msgid "You can not modify/delete a journal with entries for this period !"
 msgstr ""
-"Sie können kein Journal beenden ohne Buchungseintrag für diese Peridode! (-> "
-"Wirtschaftsperiode)"
+"Sie können ein Journal (Buch) mit Buchungen in dieser Periode nicht "
+"verändern / löschen!"
 
 #. module: account
 #: help:account.invoice,origin:0
 #: help:account.invoice.line,origin:0
 msgid "Reference of the document that produced this invoice."
-msgstr "Referenz des Rechnungsdokuments"
+msgstr "Referenz zum Ursprungsdokuments dieser Rechnung."
 
 #. module: account
 #: view:account.analytic.line:0
@@ -1324,7 +1330,7 @@ msgstr "Sonstige"
 #. module: account
 #: view:account.subscription:0
 msgid "Draft Subscription"
-msgstr "Entwurf Abonnement"
+msgstr "Abonnement im Entwurf"
 
 #. module: account
 #: view:account.account:0
@@ -1358,7 +1364,7 @@ msgstr "Konto"
 #. module: account
 #: field:account.tax,include_base_amount:0
 msgid "Included in base amount"
-msgstr "Inbegriffen in Steuergrundlage"
+msgstr "Im Grundbetrag enthalten"
 
 #. module: account
 #: view:account.entries.report:0
@@ -1386,42 +1392,43 @@ msgstr "Ebene"
 #: model:ir.ui.menu,name:account.menu_tax_report
 #: model:ir.ui.menu,name:account.next_id_27
 msgid "Taxes"
-msgstr "Umsatzsteuer"
+msgstr "Steuern"
 
 #. module: account
-#: code:addons/account/wizard/account_financial_report.py:69
-#: code:addons/account/wizard/account_report_common.py:144
+#: code:addons/account/wizard/account_financial_report.py:70
+#: code:addons/account/wizard/account_report_common.py:145
 #, python-format
 msgid "Select a starting and an ending period"
-msgstr "Wähle eine Start und Ende Periode"
+msgstr "Wähle eine Start- und eine End-Periode"
 
 #. module: account
 #: model:account.financial.report,name:account.account_financial_report_profitandloss0
+#: model:ir.actions.act_window,name:account.action_account_report_pl
 msgid "Profit and Loss"
-msgstr "GuV"
+msgstr "Gewinn und Verlust"
 
 #. module: account
 #: model:ir.model,name:account.model_account_account_template
 msgid "Templates for Accounts"
-msgstr "Vorlage Finanzkonten"
+msgstr "Finanzkontenvorlagen"
 
 #. module: account
 #: view:account.tax.code.template:0
 msgid "Search tax template"
-msgstr "Suche Kontenplan Umsatzsteuer"
+msgstr "Durchsuche Steuerkontenvorlagen"
 
 #. module: account
 #: view:account.move.reconcile:0
 #: model:ir.actions.act_window,name:account.action_account_reconcile_select
 #: model:ir.actions.act_window,name:account.action_view_account_move_line_reconcile
 msgid "Reconcile Entries"
-msgstr "Buchen OP Ausgleich"
+msgstr "OP-Ausgleich buchen"
 
 #. module: account
 #: model:ir.actions.report.xml,name:account.account_overdue
 #: view:res.company:0
 msgid "Overdue Payments"
-msgstr "Fällige Rechnungen"
+msgstr "Fällige Zahlungen"
 
 #. module: account
 #: report:account.third_party_ledger:0
@@ -1437,20 +1444,21 @@ msgstr "Zurücksetzen auf Entwurf"
 #. module: account
 #: view:wizard.multi.charts.accounts:0
 msgid "Bank Information"
-msgstr "Bank Informationen"
+msgstr "Bankinformationen"
 
 #. module: account
 #: view:account.aged.trial.balance:0
 #: view:account.common.report:0
 msgid "Report Options"
-msgstr "Report Optionen"
+msgstr "Berichtsoptionen"
 
 #. module: account
 #: model:ir.model,name:account.model_account_entries_report
 msgid "Journal Items Analysis"
-msgstr "Analyse der Journaleinträge"
+msgstr "Analyse der Buchungen"
 
 #. module: account
+#: report:account.aged_trial_balance:0
 #: model:ir.ui.menu,name:account.next_id_22
 msgid "Partners"
 msgstr "Partner"
@@ -1475,12 +1483,14 @@ msgid "Central Journal"
 msgstr "Zentrales Journal"
 
 #. module: account
+#: report:account.account.balance:0
 #: selection:account.balance.report,display_account:0
 #: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
 #: selection:account.partner.balance,display_partner:0
 #: selection:account.report.general.ledger,display_account:0
 msgid "With balance is not equal to 0"
-msgstr "Konten mit Saldo"
+msgstr "Konten mit Saldo ungeleich 0"
 
 #. module: account
 #: view:account.tax:0
@@ -1495,17 +1505,17 @@ msgstr "Analytisches Konto f. Kosten"
 #. module: account
 #: view:account.model:0
 msgid "Create entries"
-msgstr "Erzeuge Buchungen"
+msgstr "Buchungen anlegen"
 
 #. module: account
 #: field:account.entries.report,nbr:0
 msgid "# of Items"
-msgstr "# Buchungen"
+msgstr "Buchungsanzahl"
 
 #. module: account
 #: field:account.automatic.reconcile,max_amount:0
 msgid "Maximum write-off amount"
-msgstr "Max. Abschreibung"
+msgstr "Höchstbetrag f. Abschreibungen"
 
 #. module: account
 #: view:account.invoice:0
@@ -1516,7 +1526,7 @@ msgstr "Berechne Steuern"
 #: field:account.chart.template,code_digits:0
 #: field:wizard.multi.charts.accounts,code_digits:0
 msgid "# of Digits"
-msgstr "# Stellenanzahl"
+msgstr "Stellenanzahl"
 
 #. module: account
 #: field:account.journal,entry_posted:0
@@ -1545,7 +1555,7 @@ msgstr ""
 #. module: account
 #: view:account.entries.report:0
 msgid "# of Entries "
-msgstr "# Einzelposten "
+msgstr "Anz. Positionen "
 
 #. module: account
 #: help:account.fiscal.position,active:0
@@ -1553,13 +1563,13 @@ msgid ""
 "By unchecking the active field, you may hide a fiscal position without "
 "deleting it."
 msgstr ""
-"Durch Deaktivierung des Aktive Feldes können Sie die Finanzposition "
-"deaktivieren ohne diese zu löschen.."
+"Durch Deaktivierung des Feldes \"Aktiv\" können Sie die Finanzposition "
+"verbergen ohne diese zu löschen."
 
 #. module: account
 #: model:ir.model,name:account.model_temp_range
 msgid "A Temporary table used for Dashboard view"
-msgstr "Eine temporäre Tabelle für Pinnwand Ansichten etc."
+msgstr "Eine temporäre Tabelle für Pinnwand-Ansichten"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_invoice_tree4
@@ -1576,7 +1586,7 @@ msgstr "Lieferantengutschriften"
 #: selection:account.fiscalyear,state:0
 #: selection:account.period,state:0
 msgid "Closed"
-msgstr "Beendet"
+msgstr "Abgeschlossen"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_finance_recurrent_entries
@@ -1586,12 +1596,12 @@ msgstr "Wiederkehrende Buchungen"
 #. module: account
 #: model:ir.model,name:account.model_account_fiscal_position_template
 msgid "Template for Fiscal Position"
-msgstr "Steuerzuordnung Vorlage"
+msgstr "Vorlagen für die Bilanz"
 
 #. module: account
 #: field:account.automatic.reconcile,reconciled:0
 msgid "Reconciled transactions"
-msgstr "Buchungen OP Ausgleich"
+msgstr "Ausgeglichene Geschäftsvorfälle"
 
 #. module: account
 #: field:account.journal.view,columns_id:0
@@ -1617,7 +1627,7 @@ msgstr "Gruppen"
 #: field:account.invoice,amount_untaxed:0
 #: field:report.invoice.created,amount_untaxed:0
 msgid "Untaxed"
-msgstr "Nettobetrag"
+msgstr "Nicht versteuert"
 
 #. module: account
 #: view:account.partner.reconcile.process:0
@@ -1627,7 +1637,7 @@ msgstr "Gehe zu nächstem Partner"
 #. module: account
 #: view:account.bank.statement:0
 msgid "Search Bank Statements"
-msgstr "Suche Bankauszug"
+msgstr "Bankauszüge durchsuchen"
 
 #. module: account
 #: view:account.move.line:0
@@ -1644,13 +1654,13 @@ msgstr "Kreditorenkonto"
 #: field:account.tax,account_paid_id:0
 #: field:account.tax.template,account_paid_id:0
 msgid "Refund Tax Account"
-msgstr "Gutschrift Steuerkonto"
+msgstr "Rückvergütung vom Steuerkonto"
 
 #. module: account
 #: view:account.bank.statement:0
 #: field:account.bank.statement,line_ids:0
 msgid "Statement lines"
-msgstr "Belegzeilen"
+msgstr "Belegpositionen"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_bank_statement_tree
@@ -1662,13 +1672,14 @@ msgid ""
 "the Payment column of a line, you can press F1 to open the reconciliation "
 "form."
 msgstr ""
-"Ein Bankauszug beinhaltet alle Zahlungsvorgänge einer bestimmten Periode auf "
-"einem Bankkonto, einer Kreditkarte oder anderen Konten für finanzielle "
-"Transaktionen. Der Eröffnungssaldo sowie der Endsaldo wird für jeden Auszug "
-"automatisch errechnet aus dem Kontosaldo zu Beginn der Buchung eines Auszugs "
-"und den gebuchten finanziellen Transaktionen. Wenn Sie sich in der Spalte "
-"Zahlungsausgleich einer Position in einem Bankauszugs befinden, können Sie "
-"über F1 in das Fenster für den Ausgleich von offenen Posten kommen."
+"Ein Bankauszug (Kontoauszug) beinhaltet alle Zahlungsvorgänge eines "
+"gegebenen Zeitraumes auf einem Bankkonto, einer Kreditkarte oder anderen "
+"Konten für finanzielle Transaktionen. Der Eröffnungssaldo sowie der Endsaldo "
+"wird für jeden Auszug automatisch errechnet aus dem Kontosaldo zu Beginn der "
+"Buchung eines Auszugs und den gebuchten finanziellen Transaktionen. Wenn Sie "
+"sich in der Spalte Zahlungsausgleich einer Position in einem Bankauszugs "
+"befinden, können Sie Ã¼ber F1 in das Fenster für den Ausgleich von offenen "
+"Posten kommen."
 
 #. module: account
 #: report:account.analytic.account.cost_ledger:0
@@ -1701,7 +1712,7 @@ msgstr "Rechnung"
 #: model:process.node,note:account.process_node_analytic0
 #: model:process.node,note:account.process_node_analyticcost0
 msgid "Analytic costs to invoice"
-msgstr "Abrechenbare Analytische Kosten"
+msgstr "Anrechenbare Analytische Kosten"
 
 #. module: account
 #: view:ir.sequence:0
@@ -1711,12 +1722,12 @@ msgstr "Geschäftsjahr Sequenz"
 #. module: account
 #: field:wizard.multi.charts.accounts,seq_journal:0
 msgid "Separated Journal Sequences"
-msgstr "Unterschiedliche Journal Sequenzen"
+msgstr "Unterteilte Folge von Journalen"
 
 #. module: account
 #: view:account.invoice:0
 msgid "Responsible"
-msgstr "Mitarbeiter"
+msgstr "Verantwortlicher"
 
 #. module: account
 #: view:account.invoice.refund:0
@@ -1724,9 +1735,9 @@ msgid ""
 "Cancel Invoice: Creates the refund invoice, validate and reconcile it to "
 "cancel the current invoice."
 msgstr ""
-"Storno der Rechnung: Erzeugt eine Gutschrift, bestätige diese und erzeuge "
-"einen Ausgleichsbuchung gegen die Ursprungsrechnung für den Ausgleich des "
-"existierenden offenen Postens."
+"Storno der Rechnung: Erzeugt eine Gutschrift, Sie bestätigen diese und "
+"erzeugen eine Ausgleichsbuchung gegen die Ursprungsrechnung für den "
+"Ausgleich des existierenden offenen Postens."
 
 #. module: account
 #: model:ir.ui.menu,name:account.periodical_processing_invoicing
@@ -1742,10 +1753,10 @@ msgstr "Unbekannter Partner"
 #. module: account
 #: field:account.tax.code,sum:0
 msgid "Year Sum"
-msgstr "Summe Jahr"
+msgstr "Jahressumme"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1429
+#: code:addons/account/account_invoice.py:1431
 #, python-format
 msgid ""
 "You selected an Unit of Measure which is not compatible with the product."
@@ -1801,7 +1812,7 @@ msgstr "Debitoren & Kreditoren"
 #. module: account
 #: model:ir.model,name:account.model_account_common_journal_report
 msgid "Account Common Journal Report"
-msgstr "Standardauswertung von Journalen"
+msgstr "Auswertung von Sammel-Journalen"
 
 #. module: account
 #: selection:account.partner.balance,display_partner:0
@@ -1817,7 +1828,7 @@ msgstr "Analytischer Kontenplan"
 #: view:account.analytic.line:0
 #: view:analytic.entries.report:0
 msgid "My Entries"
-msgstr "Meine Buchungen"
+msgstr "Eigene Buchungen"
 
 #. module: account
 #: report:account.overdue:0
@@ -1825,10 +1836,10 @@ msgid "Customer Ref:"
 msgstr "Kundenreferenz:"
 
 #. module: account
-#: code:addons/account/account_cash_statement.py:292
+#: code:addons/account/account_cash_statement.py:293
 #, python-format
 msgid "User %s does not have rights to access %s journal !"
-msgstr "Benutzer %s hat keinen Zugriff auf das %s Journal!"
+msgstr "Benutzer %s hat keinen Zugriff auf das Journal %s!"
 
 #. module: account
 #: help:account.period,special:0
@@ -1838,7 +1849,7 @@ msgstr "Diese Perioden können sich Ã¼berschneiden"
 #. module: account
 #: model:process.node,name:account.process_node_draftstatement0
 msgid "Draft statement"
-msgstr "Beleg Entwurf"
+msgstr "Belegentwurf"
 
 #. module: account
 #: view:account.tax:0
@@ -1873,7 +1884,7 @@ msgstr "Statistik Rechnungen"
 #. module: account
 #: model:ir.model,name:account.model_account_period_close
 msgid "period close"
-msgstr "beende Periode"
+msgstr "Periodenabschluss"
 
 #. module: account
 #: view:account.installer:0
@@ -1923,7 +1934,7 @@ msgstr "Fehler! Sie können keine rekursiven Unternehmen erzeugen."
 #. module: account
 #: model:ir.actions.report.xml,name:account.account_journal_sale_purchase
 msgid "Sale/Purchase Journal"
-msgstr "Verkauf/Einkauf Journal"
+msgstr "Verkaufs-/Einkaufsbericht"
 
 #. module: account
 #: view:account.analytic.account:0
@@ -1935,7 +1946,7 @@ msgstr "Analytisches Konto"
 #, python-format
 msgid "Please verify that an account is defined in the journal."
 msgstr ""
-"Bitte stellen Sie sicher dass ein Konto für das Journal definiert und "
+"Bitte stellen Sie sicher, dass ein Konto für das Journal definiert und "
 "hinterlegt wurde."
 
 #. module: account
@@ -1953,7 +1964,7 @@ msgstr "Druck Finanzjournal"
 #. module: account
 #: model:ir.model,name:account.model_product_category
 msgid "Product Category"
-msgstr "Produkt Kategorie"
+msgstr "Produktkategorie"
 
 #. module: account
 #: selection:account.account.type,report_type:0
@@ -1967,20 +1978,21 @@ msgid ""
 "will be added, Loss : Amount will be deducted.), as calculated in Profit & "
 "Loss Report"
 msgstr ""
-"Dieses Konto wird automatisch als Saldo der G&V errechnet und in der Bilanz "
-"dargestellt."
+"Dieses Konto wird automatisch als Saldo der GuV errechnet und in der Bilanz "
+"dargestellt (Bei Gewinn wird hinzugerechnet, bei Verlust entsprechend "
+"abgezogen)."
 
 #. module: account
 #: model:process.node,note:account.process_node_reconciliation0
 #: model:process.node,note:account.process_node_supplierreconciliation0
 msgid "Comparison between accounting and payment entries"
-msgstr "Abgleich Fibukonten mit Zahlungseingängen"
+msgstr "Vergleich zwischen Fibu-Konten und Zahlungseingängen"
 
 #. module: account
 #: view:account.tax:0
 #: view:account.tax.template:0
 msgid "Tax Definition"
-msgstr "Steuer Definition"
+msgstr "Steuerdefinition"
 
 #. module: account
 #: help:wizard.multi.charts.accounts,seq_journal:0
@@ -1988,8 +2000,9 @@ msgid ""
 "Check this box if you want to use a different sequence for each created "
 "journal. Otherwise, all will use the same sequence."
 msgstr ""
-"Hake diese Box an falls Sie unterschiedliche Sequenzen für jedes neue "
-"Journal haben möchten. Ansonsten wird immer das gleiche Journal verwendet."
+"Diese Box anwählen, falls Sie unterschiedliche Sequenzen für jedes neue "
+"Journal verwenden möchten. Ansonsten wird immer die gleiche Folgen-"
+"Nummerierung verwendet."
 
 #. module: account
 #: help:account.partner.ledger,amount_currency:0
@@ -1998,8 +2011,8 @@ msgid ""
 "It adds the currency column if the currency is different then the company "
 "currency"
 msgstr ""
-"Zusätzliche Anzeige der Währung, wenn die Währung anders ist als die "
-"eingestellte Währung des Unternehmens"
+"Zusätzliche Anzeige der Währung, wenn die Währung sich von der eingestellten "
+"Währung des Unternehmens unterscheidet"
 
 #. module: account
 #: help:account.journal,allow_date:0
@@ -2014,7 +2027,7 @@ msgstr ""
 #: code:addons/account/account_invoice.py:73
 #, python-format
 msgid "You must define an analytic journal of type '%s'!"
-msgstr "Sie müssen eine Analyse Journal vom Typ '%s' definieren"
+msgstr "Sie müssen eine Analysebericht vom Typ '%s' definieren!"
 
 #. module: account
 #: field:account.installer,config_logo:0
@@ -2029,9 +2042,10 @@ msgid ""
 "currency. You should remove the secondary currency on the account or select "
 "a multi-currency view on the journal."
 msgstr ""
-"The selected account of your Journal Entry forces to provide a secondary "
-"currency. You should remove the secondary currency on the account or select "
-"a multi-currency view on the journal."
+"Das ausgewählte Konto Ihrer Buchung erzwingt die Angabe einer "
+"Alternativwährung. Sie müssen die Verwendung einer Alternativwährung in den "
+"Einstellungen des Kontos ausschalten oder aber Mehrwährungsfähigkeit im "
+"Bericht einschalten."
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_financial_report_tree
@@ -2124,7 +2138,7 @@ msgstr "Januar"
 #. module: account
 #: view:account.journal:0
 msgid "Validations"
-msgstr "Prüfvorgänge"
+msgstr "Prüfungen"
 
 #. module: account
 #: view:account.entries.report:0
@@ -2142,7 +2156,7 @@ msgid ""
 "Invalid period ! Some periods overlap or the date period is not in the scope "
 "of the fiscal year. "
 msgstr ""
-"Ungültige Periode! Diese Ã¼berlappen oder liegen außerhalb des "
+"Ungültige Periode! Manche Ã¼berlappen sich oder liegen außerhalb des "
 "Geschäftsjahres "
 
 #. module: account
@@ -2157,10 +2171,10 @@ msgstr "Sie müssen ein Analyse-Journal für das Journal '%s' deinieren!"
 #: selection:account.invoice.report,state:0
 #: selection:report.invoice.created,state:0
 msgid "Pro-forma"
-msgstr "Pro-Forma"
+msgstr "Proforma"
 
 #. module: account
-#: code:addons/account/account.py:1461
+#: code:addons/account/account.py:1478
 #, python-format
 msgid ""
 "There is no default default debit account defined \n"
@@ -2189,10 +2203,10 @@ msgstr ""
 #. module: account
 #: view:account.chart.template:0
 msgid "Search Chart of Account Templates"
-msgstr "Suche Kontenplan Vorlage"
+msgstr "Durchsuche Kontenplan-Vorlagen"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1277
+#: code:addons/account/account_move_line.py:1292
 #, python-format
 msgid ""
 "Can not create an automatic sequence for this piece!\n"
@@ -2249,7 +2263,7 @@ msgid "Description"
 msgstr "Buchungstext"
 
 #. module: account
-#: code:addons/account/account.py:3119
+#: code:addons/account/account.py:3136
 #, python-format
 msgid "ECNJ"
 msgstr "GSE"
@@ -2258,7 +2272,7 @@ msgstr "GSE"
 #: view:account.subscription:0
 #: selection:account.subscription,state:0
 msgid "Running"
-msgstr "In Weiterbearbeitung"
+msgstr "Laufend"
 
 #. module: account
 #: view:account.chart.template:0
@@ -2268,7 +2282,7 @@ msgid "Income Account"
 msgstr "Erlöskonto"
 
 #. module: account
-#: code:addons/account/account_invoice.py:370
+#: code:addons/account/account_invoice.py:379
 #, python-format
 msgid "There is no Accounting Journal of type Sale/Purchase defined!"
 msgstr ""
@@ -2300,16 +2314,17 @@ msgstr "Änderung zu"
 #. module: account
 #: view:account.entries.report:0
 msgid "# of Products Qty "
-msgstr "# Menge v. Produkt "
+msgstr "Menge des Produkts Anz. "
 
 #. module: account
 #: model:ir.model,name:account.model_product_template
 msgid "Product Template"
-msgstr "Vorlage f. Produkte"
+msgstr "Produktvorlage"
 
 #. module: account
 #: report:account.account.balance:0
 #: field:account.aged.trial.balance,fiscalyear_id:0
+#: report:account.aged_trial_balance:0
 #: field:account.balance.report,fiscalyear_id:0
 #: report:account.central.journal:0
 #: field:account.central.journal,fiscalyear_id:0
@@ -2319,6 +2334,7 @@ msgstr "Vorlage f. Produkte"
 #: field:account.common.report,fiscalyear_id:0
 #: view:account.entries.report:0
 #: field:account.entries.report,fiscalyear_id:0
+#: report:account.financial.report:0
 #: field:account.fiscalyear,name:0
 #: report:account.general.journal:0
 #: field:account.general.journal,fiscalyear_id:0
@@ -2366,10 +2382,10 @@ msgstr "Lasse leer für alle offenen Geschäftsjahre"
 #. module: account
 #: field:account.invoice.report,account_line_id:0
 msgid "Account Line"
-msgstr "Buchungszeile"
+msgstr "Kontobuchung"
 
 #. module: account
-#: code:addons/account/account.py:1468
+#: code:addons/account/account.py:1485
 #, python-format
 msgid ""
 "There is no default default credit account defined \n"
@@ -2405,7 +2421,7 @@ msgid "Main Sequence"
 msgstr "Haupt Sequenz"
 
 #. module: account
-#: code:addons/account/account_bank_statement.py:402
+#: code:addons/account/account_bank_statement.py:403
 #, python-format
 msgid ""
 "In order to delete a bank statement, you must first cancel it to delete "
@@ -2430,7 +2446,7 @@ msgstr "Zahlungsbedingung"
 #: model:ir.actions.act_window,name:account.action_account_fiscal_position_form
 #: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form
 msgid "Fiscal Positions"
-msgstr "Steuerzuordnung"
+msgstr "Bilanzpositionen"
 
 #. module: account
 #: constraint:account.account:0
@@ -2467,7 +2483,7 @@ msgstr "Offen"
 #: model:process.node,note:account.process_node_draftinvoices0
 #: model:process.node,note:account.process_node_supplierdraftinvoices0
 msgid "Draft state of an invoice"
-msgstr "Entwurf Status bei Rechnung"
+msgstr "Entwurfsstatus einer Rechnung"
 
 #. module: account
 #: view:account.partner.reconcile.process:0
@@ -2478,10 +2494,10 @@ msgstr "Offene Posten Ausgleich bei Partnern"
 #: field:account.tax,tax_code_id:0
 #: view:account.tax.code:0
 msgid "Account Tax Code"
-msgstr "Umsatzsteuer"
+msgstr "Steuerschlüssel"
 
 #. module: account
-#: code:addons/account/account_invoice.py:572
+#: code:addons/account/account_invoice.py:581
 #, python-format
 msgid ""
 "Can't find any account journal of %s type for this company.\n"
@@ -2498,7 +2514,7 @@ msgstr ""
 #: model:account.payment.term,name:account.account_payment_term_advance
 #: model:account.payment.term,note:account.account_payment_term_advance
 msgid "30% Advance End 30 Days"
-msgstr "30% Anzahlung, Rest in 30 Tagen"
+msgstr "30% Anzahlung, Rest innerhalb von 30 Tagen"
 
 #. module: account
 #: view:account.entries.report:0
@@ -2546,13 +2562,13 @@ msgstr ""
 #. module: account
 #: selection:account.move.line,centralisation:0
 msgid "Debit Centralisation"
-msgstr "Zentrales Gegenkonto"
+msgstr "Zentrales Soll-Gegenkonto"
 
 #. module: account
 #: view:account.invoice.confirm:0
 #: model:ir.actions.act_window,name:account.action_account_invoice_confirm
 msgid "Confirm Draft Invoices"
-msgstr "Bestätige Rechnung"
+msgstr "Bestätige Rechnungsentwurf"
 
 #. module: account
 #: field:account.entries.report,day:0
@@ -2574,7 +2590,7 @@ msgid "Account Model Entries"
 msgstr "Buchungsvorlage"
 
 #. module: account
-#: code:addons/account/account.py:3117
+#: code:addons/account/account.py:3134
 #, python-format
 msgid "EXJ"
 msgstr "EK"
@@ -2582,7 +2598,7 @@ msgstr "EK"
 #. module: account
 #: field:product.template,supplier_taxes_id:0
 msgid "Supplier Taxes"
-msgstr "Steuern Einkauf"
+msgstr "Steuern des Einkaufs (Vorsteuer)"
 
 #. module: account
 #: view:account.entries.report:0
@@ -2611,7 +2627,7 @@ msgstr "Periode auswählen"
 #. module: account
 #: model:ir.ui.menu,name:account.menu_account_pp_statements
 msgid "Statements"
-msgstr "Abstimmung von Konten"
+msgstr "Abstimmung von Konten (Ausweis)"
 
 #. module: account
 #: report:account.analytic.account.journal:0
@@ -2632,13 +2648,13 @@ msgstr ""
 msgid ""
 "This report gives you an overview of the situation of a specific journal"
 msgstr ""
-"Diese Auswertung ermöglicht einen Ãœberblick Ã¼ber den Saldo das spezifizierte "
+"Diese Auswertung ermöglicht einen Ãœberblick Ã¼ber den Saldo des angegebenen "
 "Journals."
 
 #. module: account
 #: model:ir.model,name:account.model_account_move_line_reconcile_writeoff
 msgid "Account move line reconcile (writeoff)"
-msgstr "OP-Ausgleich (mit Differenz)"
+msgstr "OP-Ausgleich (Abschreibung)"
 
 #. module: account
 #: model:account.account.type,name:account.account_type_tax
@@ -2673,10 +2689,10 @@ msgid "Accounts"
 msgstr "Finanzkonten"
 
 #. module: account
-#: code:addons/account/account_invoice.py:369
+#: code:addons/account/account_invoice.py:378
 #, python-format
 msgid "Configuration Error!"
-msgstr "Konfigurationsfehler !"
+msgstr "Konfigurationsfehler!"
 
 #. module: account
 #: field:account.invoice.report,price_average:0
@@ -2692,7 +2708,7 @@ msgstr "Datum:"
 #: report:account.journal.period.print:0
 #: report:account.journal.period.print.sale.purchase:0
 msgid "Label"
-msgstr "Produktbeschriftung"
+msgstr "Etikett"
 
 #. module: account
 #: view:account.tax:0
@@ -2746,7 +2762,7 @@ msgstr "Automatischer Kontenausgleich"
 #. module: account
 #: field:account.invoice,reconciled:0
 msgid "Paid/Reconciled"
-msgstr "Bezahlt / OP Ausgleich"
+msgstr "Bezahlt/Beglichen"
 
 #. module: account
 #: field:account.tax,ref_base_code_id:0
@@ -2777,7 +2793,7 @@ msgstr "Ãœbergeordnete Kontenplan Vorlage"
 #: field:account.tax,parent_id:0
 #: field:account.tax.template,parent_id:0
 msgid "Parent Tax Account"
-msgstr "Oberkonto Steuer"
+msgstr "Ãœbergeordnetes Steuerkonto"
 
 #. module: account
 #: code:addons/account/wizard/account_change_currency.py:59
@@ -2796,6 +2812,7 @@ msgstr ""
 #. module: account
 #: view:account.aged.trial.balance:0
 #: model:ir.actions.act_window,name:account.action_account_aged_balance_view
+#: model:ir.actions.report.xml,name:account.account_aged_partner_balance
 #: model:ir.ui.menu,name:account.menu_aged_trial_balance
 msgid "Aged Partner Balance"
 msgstr "Saldo Partner nach Alter"
@@ -2845,21 +2862,21 @@ msgstr "Konfigurieren Sie Ihren Kontenplan"
 #. module: account
 #: view:account.use.model:0
 msgid "This wizard will create recurring accounting entries"
-msgstr "Diese Assistent erzeugt wiederkehrende Buchungen."
+msgstr "Dieser Assistent erzeugt wiederkehrende Buchungen."
 
 #. module: account
-#: code:addons/account/account.py:1321
+#: code:addons/account/account.py:1329
 #, python-format
 msgid "No sequence defined on the journal !"
-msgstr "Keine Sequenz für dieses Journal definiert !"
+msgstr "Keine Sequenz für dieses Journal definiert!"
 
 #. module: account
-#: code:addons/account/account.py:2268
-#: code:addons/account/account_invoice.py:688
+#: code:addons/account/account.py:2285
+#: code:addons/account/account_invoice.py:697
 #: code:addons/account/account_move_line.py:173
 #, python-format
 msgid "You have to define an analytic journal on the '%s' journal!"
-msgstr "Sie sollten ein analytisches Journal im '%s' Journal definieren!"
+msgstr "Sie müssen ein analytisches Journal im '%s' Journal definieren!"
 
 #. module: account
 #: code:addons/account/account.py:407
@@ -2868,7 +2885,7 @@ msgid ""
 "You need an Opening journal with centralisation checked to set the initial "
 "balance!"
 msgstr ""
-"Für die Eröffnungsbilanz  benötigen sie ein Eröffnungsjournal mit "
+"Für die Eröffnungsbilanz benötigen Sie ein Eröffnungsjournal mit "
 "Zentralisierung."
 
 #. module: account
@@ -2964,10 +2981,10 @@ msgstr ""
 #. module: account
 #: field:account.invoice.tax,base_amount:0
 msgid "Base Code Amount"
-msgstr "Steuergrundlage Betrag"
+msgstr "Bemessungsgrundlage Betrag"
 
 #. module: account
-#: code:addons/account/account_invoice.py:392
+#: code:addons/account/account_invoice.py:401
 #, python-format
 msgid ""
 "You can not delete an invoice which is open or paid. We suggest you to "
@@ -2982,7 +2999,7 @@ msgid "Default Sale Tax"
 msgstr "Standard Steuer Verkauf"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1013
+#: code:addons/account/account_invoice.py:1025
 #, python-format
 msgid "Invoice  '%s' is validated."
 msgstr "Rechnung  '%s' ist validiert."
@@ -3001,7 +3018,7 @@ msgstr ""
 #. module: account
 #: model:ir.ui.menu,name:account.menu_finance_accounting
 msgid "Financial Accounting"
-msgstr "Finanzen"
+msgstr "Finanzbuchhaltung"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_account_report_pl
@@ -3020,16 +3037,16 @@ msgstr "Gewinn und Verlust"
 #: model:ir.model,name:account.model_account_fiscal_position
 #: field:res.partner,property_account_position:0
 msgid "Fiscal Position"
-msgstr "Steuerzuordnung"
+msgstr "Bilanz"
 
 #. module: account
-#: code:addons/account/account_invoice.py:735
+#: code:addons/account/account_invoice.py:744
 #, python-format
 msgid ""
 "Tax base different!\n"
 "Click on compute to update the tax base."
 msgstr ""
-"Die Steuerbasis stimmt nicht!\n"
+"Die Steuergrundlage ist geändert!\n"
 "Drücken Sie Berechnen!"
 
 #. module: account
@@ -3068,12 +3085,12 @@ msgstr "Verantwortlicher Mitarbeiter für dieses Journal"
 #. module: account
 #: view:account.period:0
 msgid "Search Period"
-msgstr "Suche Periode"
+msgstr "Durchsuche Periode"
 
 #. module: account
 #: view:account.change.currency:0
 msgid "Invoice Currency"
-msgstr "Währung"
+msgstr "Rechnungswährung"
 
 #. module: account
 #: field:accounting.report,account_report_id:0
@@ -3089,7 +3106,7 @@ msgstr "Vereinbarungen"
 #. module: account
 #: field:account.bank.statement,total_entry_encoding:0
 msgid "Cash Transaction"
-msgstr "Barkasse Transaktionen"
+msgstr "Bar-Geschäftsvorfälle"
 
 #. module: account
 #: view:res.partner:0
@@ -3099,7 +3116,7 @@ msgstr "Bankkonto"
 #. module: account
 #: field:account.chart.template,tax_template_ids:0
 msgid "Tax Template List"
-msgstr "Umsatzsteuer Vorlagenliste"
+msgstr "Steuer-Vorlagenliste"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_account_print_sale_purchase_journal
@@ -3119,7 +3136,7 @@ msgstr ""
 "wird. In den meisten Ländern ist \"Durchhschnitt\" die legale Methode, aber "
 "nur wenige Systeme können dies. Für Importe von anderen Systemen muss daher "
 "ggf. der Tageskurs verwendet werden. Eingehende Transkationen verwenden "
-"jedenfalls den Tageskurs."
+"grundsätzlich den Tageskurs."
 
 #. module: account
 #: help:account.chart.template,code_digits:0
@@ -3130,12 +3147,12 @@ msgstr "Anzahl Stellen für Konto"
 #. module: account
 #: field:account.payment.term.line,name:0
 msgid "Line Name"
-msgstr "Zeile Bezeichnung"
+msgstr "Zeilenbezeichnung"
 
 #. module: account
 #: view:account.fiscalyear:0
 msgid "Search Fiscalyear"
-msgstr "Suche Geschäftsjahr"
+msgstr "Durchsuche Geschäftsjahr"
 
 #. module: account
 #: selection:account.tax,applicable_type:0
@@ -3163,7 +3180,7 @@ msgstr "Abschreibungskonto"
 #: view:account.subscription:0
 #: field:account.subscription,model_id:0
 msgid "Model"
-msgstr "Standard"
+msgstr "Modell"
 
 #. module: account
 #: help:account.invoice.tax,base_code_id:0
@@ -3179,7 +3196,7 @@ msgid "View"
 msgstr "Ansicht"
 
 #. module: account
-#: code:addons/account/account.py:3363
+#: code:addons/account/account.py:3380
 #: code:addons/account/account_bank.py:90
 #, python-format
 msgid "BNK"
@@ -3241,7 +3258,7 @@ msgid ""
 msgstr ""
 "Der Assistent wird alle Buchungen für eine bestimmtes Journal innerhalb "
 "einer bestimmten Periode buchen. Sobald die Buchungen erzeugt wurden, können "
-"Sie nicht mehr vorher abgeändert werden."
+"Sie nicht mehr abgeändert werden."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_chart_template_form
@@ -3388,17 +3405,17 @@ msgid "Starting Balance"
 msgstr "Anfangssaldo"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1332
+#: code:addons/account/account_invoice.py:1345
 #, python-format
 msgid "No Partner Defined !"
-msgstr "Kein Partner definiert!"
+msgstr "Kein Partner festgelegt!"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_period_close
 #: model:ir.actions.act_window,name:account.action_account_period_tree
 #: model:ir.ui.menu,name:account.menu_action_account_period_close_tree
 msgid "Close a Period"
-msgstr "Beende Periode"
+msgstr "Periode abschließen"
 
 #. module: account
 #: field:account.financial.report,display_detail:0
@@ -3421,15 +3438,15 @@ msgid ""
 "The amount expressed in the related account currency if not equal to the "
 "company one."
 msgstr ""
-"Der Betrag in einer anderen Währung, insofern normalerweise die "
-"Unternehmenswährung eine andere ist."
+"Der Betrag in der Währung des Kontos angegeben, sofern diese sich von der "
+"Unternehmenswährung unterscheidet."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_unreconcile
 #: model:ir.actions.act_window,name:account.action_account_unreconcile_reconcile
 #: model:ir.actions.act_window,name:account.action_account_unreconcile_select
 msgid "Unreconcile Entries"
-msgstr "Ausgleich Offene Posten zurücksetzen"
+msgstr "OP-Ausgleich stornieren"
 
 #. module: account
 #: field:account.tax.code,notprintable:0
@@ -3444,7 +3461,7 @@ msgid "Chart of Tax"
 msgstr "Steuerkontenplan"
 
 #. module: account
-#: code:addons/account/account_cash_statement.py:314
+#: code:addons/account/account_cash_statement.py:315
 #, python-format
 msgid "The closing balance should be the same than the computed balance!"
 msgstr "Der Endsaldo muss mit dem errechneten Ã¼bereinstimmen!"
@@ -3452,7 +3469,7 @@ msgstr "Der Endsaldo muss mit dem errechneten Ã¼bereinstimmen!"
 #. module: account
 #: view:account.journal:0
 msgid "Search Account Journal"
-msgstr "Suche Buchungsjournal"
+msgstr "Durchsuche Buchungsjournal"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice
@@ -3504,13 +3521,13 @@ msgstr "Suche Buchung"
 #: field:account.tax.code,name:0
 #: field:account.tax.code.template,name:0
 msgid "Tax Case Name"
-msgstr "Umsatzsteuervorgang"
+msgstr "Versteuerungsbezeichnung"
 
 #. module: account
 #: report:account.invoice:0
 #: model:process.node,name:account.process_node_draftinvoices0
 msgid "Draft Invoice"
-msgstr "Entwurf Rechnung"
+msgstr "Rechnungsentwurf"
 
 #. module: account
 #: code:addons/account/wizard/account_invoice_state.py:68
@@ -3519,8 +3536,8 @@ msgid ""
 "Selected Invoice(s) cannot be cancelled as they are already in 'Cancelled' "
 "or 'Done' state!"
 msgstr ""
-"Ausgewählte Rechnung(en) kann nicht geändert, das Sie bereits im "
-"'Abgebrochen' oder 'Erledigt' Status ist."
+"Ausgewählte Rechnung(en) kann/können nicht geändert, das Sie bereits im "
+"'Abgebrochen' oder 'Erledigt' Status ist/sind."
 
 #. module: account
 #: view:account.invoice.line:0
@@ -3529,8 +3546,9 @@ msgstr "Menge:"
 
 #. module: account
 #: field:account.aged.trial.balance,period_length:0
+#: report:account.aged_trial_balance:0
 msgid "Period Length (days)"
-msgstr "Perioden Länge (Tage)"
+msgstr "Periodendauer (Tage)"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal
@@ -3546,28 +3564,28 @@ msgstr "Rechnungsstatus"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,categ_id:0
 msgid "Category of Product"
-msgstr "Produktkategorien"
+msgstr "Produktkategorie"
 
 #. module: account
 #: view:account.addtmpl.wizard:0
 #: model:ir.actions.act_window,name:account.action_account_addtmpl_wizard_form
 msgid "Create Account"
-msgstr "Erstelle Konto"
+msgstr "Konto anlegen"
 
 #. module: account
 #: model:ir.model,name:account.model_report_account_type_sales
 msgid "Report of the Sales by Account Type"
-msgstr "Auswertung Verkauf nach Kontentyp"
+msgstr "Verkaufsauswertung nach Kontentyp"
 
 #. module: account
 #: view:account.move.line:0
 msgid "Unreconciled Journal Items"
-msgstr "Nicht ausgeglichen Buchungen"
+msgstr "Nicht ausgeglichene Buchungen"
 
 #. module: account
 #: sql_constraint:res.currency:0
 msgid "The currency code must be unique per company!"
-msgstr "Der Währungscode muss je Unternehmen eindeutig sein"
+msgstr "Der Währungsschlüssel muss je Unternehmen eindeutig sein"
 
 #. module: account
 #: selection:account.account.type,close_method:0
@@ -3575,7 +3593,7 @@ msgid "Detail"
 msgstr "Details"
 
 #. module: account
-#: code:addons/account/account_invoice.py:839
+#: code:addons/account/account_invoice.py:850
 #, python-format
 msgid ""
 "Can not create the invoice !\n"
@@ -3592,12 +3610,19 @@ msgstr ""
 #. module: account
 #: report:account.invoice:0
 msgid "VAT :"
-msgstr "UST:"
+msgstr "USt.:"
 
 #. module: account
+#: report:account.account.balance:0
+#: report:account.aged_trial_balance:0
 #: report:account.central.journal:0
+#: report:account.financial.report:0
+#: report:account.general.journal:0
 #: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
 #: field:account.installer,charts:0
+#: report:account.journal.period.print:0
+#: report:account.journal.period.print.sale.purchase:0
 #: report:account.partner.balance:0
 #: report:account.third_party_ledger:0
 #: report:account.third_party_ledger_other:0
@@ -3620,11 +3645,11 @@ msgid "Centralised counterpart"
 msgstr "Zentralisierung Gegenkonto"
 
 #. module: account
-#: code:addons/account/account_move_line.py:584
+#: code:addons/account/account_move_line.py:575
 #, python-format
 msgid "You can not create journal items on a \"view\" account %s %s"
 msgstr ""
-"Sie dürfen keine Buchungen vom Typ \"Sicht\" für das Konto erzeugen %s %s"
+"Konten vom Typ \"Sicht\" %s %s können für Buchungen nicht verwendet werden"
 
 #. module: account
 #: model:ir.model,name:account.model_account_partner_reconcile_process
@@ -3639,7 +3664,8 @@ msgstr "2"
 #. module: account
 #: view:account.chart:0
 msgid "(If you do not select Fiscal year it will take all open fiscal years)"
-msgstr "(Wenn kein Geschäftsjahr ausgewählt wird, werden alle genommen)"
+msgstr ""
+"(Wenn kein Geschäftsjahr ausgewählt wird, werden alle laufenden genommen)"
 
 #. module: account
 #: selection:account.aged.trial.balance,filter:0
@@ -3673,10 +3699,15 @@ msgstr "(Wenn kein Geschäftsjahr ausgewählt wird, werden alle genommen)"
 #: field:account.subscription.line,date:0
 #: report:account.third_party_ledger:0
 #: report:account.third_party_ledger_other:0
+#: xsl:account.transfer:0
 #: selection:account.vat.declaration,filter:0
 #: selection:accounting.report,filter:0
 #: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/account_journal.py:195
+#: code:addons/account/report/account_journal.py:198
+#: code:addons/account/report/common_report_header.py:97
 #: field:analytic.entries.report,date:0
+#, python-format
 msgid "Date"
 msgstr "Datum"
 
@@ -3707,7 +3738,7 @@ msgid "Chart of Accounts Template"
 msgstr "Vorlage Kontenplan"
 
 #. module: account
-#: code:addons/account/account.py:2280
+#: code:addons/account/account.py:2297
 #, python-format
 msgid ""
 "Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -3719,7 +3750,7 @@ msgstr ""
 "Bitte ordnen Sie dem Partner eine Zahlungsbedingungen zu."
 
 #. module: account
-#: code:addons/account/account_move_line.py:837
+#: code:addons/account/account_move_line.py:846
 #, python-format
 msgid "Some entries are already reconciled !"
 msgstr "Einige Einträge wurden bereits ausgeglichen!"
@@ -3750,6 +3781,8 @@ msgstr "Finanzbudgets"
 #: selection:account.vat.declaration,filter:0
 #: selection:accounting.report,filter:0
 #: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/common_report_header.py:100
+#, python-format
 msgid "No Filters"
 msgstr "Keine Filter"
 
@@ -3783,12 +3816,12 @@ msgstr "Anzuwendender Typ (if type=code)"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,product_qty:0
 msgid "Qty"
-msgstr "Menge"
+msgstr "Anz"
 
 #. module: account
 #: field:account.invoice.report,address_contact_id:0
 msgid "Contact Address Name"
-msgstr "Partner Kontakt Name"
+msgstr "Partner Kontaktperson"
 
 #. module: account
 #: field:account.move.line,blocked:0
@@ -3798,7 +3831,7 @@ msgstr "Rechtsstreit"
 #. module: account
 #: view:account.analytic.line:0
 msgid "Search Analytic Lines"
-msgstr "Suche Analytische Buchungen"
+msgstr "Durchsuche Analytische Buchungen"
 
 #. module: account
 #: field:res.partner,property_account_payable:0
@@ -3835,7 +3868,7 @@ msgid "Analytic Items"
 msgstr "Analytische Buchungen"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1153
+#: code:addons/account/account_move_line.py:1168
 #, python-format
 msgid "Unable to change tax !"
 msgstr "Die Steuer kann nicht geändert werden!"
@@ -3843,12 +3876,12 @@ msgstr "Die Steuer kann nicht geändert werden!"
 #. module: account
 #: field:analytic.entries.report,nbr:0
 msgid "#Entries"
-msgstr "# Buchungen"
+msgstr "Anz. Buchungen"
 
 #. module: account
 #: selection:account.invoice.refund,filter_refund:0
 msgid "Create a draft Refund"
-msgstr "Erzeuge Gutschrift Entwurf"
+msgstr "Erzeuge Gutschriftsentwurf"
 
 #. module: account
 #: view:account.state.open:0
@@ -3858,7 +3891,7 @@ msgstr "Offene Rechnung"
 #. module: account
 #: field:account.invoice.tax,factor_tax:0
 msgid "Multipication factor Tax code"
-msgstr "Faktor Steuerberechnung"
+msgstr "Faktor für Steuerberechnung"
 
 #. module: account
 #: view:account.fiscal.position:0
@@ -3866,7 +3899,7 @@ msgid "Mapping"
 msgstr "Steuer Umschlüsselung"
 
 #. module: account
-#: code:addons/account/account_invoice.py:921
+#: code:addons/account/account_invoice.py:932
 #, python-format
 msgid ""
 "You cannot create an invoice on a centralised journal. Uncheck the "
@@ -3882,6 +3915,7 @@ msgstr ""
 #: report:account.analytic.account.inverted.balance:0
 #: field:account.bank.statement,name:0
 #: field:account.chart.template,name:0
+#: report:account.financial.report:0
 #: field:account.model.line,name:0
 #: field:account.move.line,name:0
 #: field:account.move.reconcile,name:0
@@ -3895,7 +3929,7 @@ msgid "Account Aged Trial balance Report"
 msgstr "Auswertung Altersstruktur Forderungen"
 
 #. module: account
-#: code:addons/account/account_move_line.py:591
+#: code:addons/account/account_move_line.py:582
 #, python-format
 msgid "You can not create journal items on a closed account %s %s"
 msgstr ""
@@ -3943,7 +3977,7 @@ msgid ""
 "same company."
 msgstr ""
 "Das gewählte  Geschäftsjahr, die Periode und das Konto müssen zum selben "
-"UNternehmen gehören."
+"Unternehmen gehören."
 
 #. module: account
 #: model:ir.actions.todo.category,name:account.category_accounting_configuration
@@ -3959,7 +3993,7 @@ msgstr "Finanzen"
 #. module: account
 #: view:account.entries.report:0
 msgid "Journal Entries with period in current year"
-msgstr "Jaurnalbuchungen des laufenden Jahres"
+msgstr "Journalbuchungen des laufenden Jahres"
 
 #. module: account
 #: help:account.central.journal,amount_currency:0
@@ -3970,7 +4004,7 @@ msgid ""
 "Print Report with the currency column if the currency is different then the "
 "company currency"
 msgstr ""
-"Drucke Auswertung / Report mit der Spalte Währung für den Fall dass sich die "
+"Drucke Auswertung/Bericht mit der Spalte Währung für den Fall, dass sich die "
 "Währung der Rechnung von der Standardwährung des Unternehmens unterscheidet"
 
 #. module: account
@@ -3979,7 +4013,7 @@ msgid ""
 "Value of Loss or Gain due to changes in exchange rate when doing multi-"
 "currency transactions."
 msgstr ""
-"Währungsgewinne oder Verluste im Zuge von Transaktionen mit mehreren "
+"Währungsgewinne oder Verluste im Zuge von Geschäftsvorfällen mit mehreren "
 "Währungen"
 
 #. module: account
@@ -4071,7 +4105,7 @@ msgstr ""
 #. module: account
 #: field:account.chart,period_from:0
 msgid "Start period"
-msgstr "Beginn der Periode"
+msgstr "Periodenbeginn"
 
 #. module: account
 #: field:account.tax,name:0
@@ -4098,23 +4132,23 @@ msgid ""
 "If the active field is set to False, it will allow you to hide the account "
 "without removing it."
 msgstr ""
-"Falls dieses Feld aktiviert wird, kann die Anzeige für das Finanzkonto "
-"versteckt werden."
+"Mit Aktivierung wird die Anzeige für das Finanzkonto verborgen werden. ohne "
+"es löschen zu müssen."
 
 #. module: account
 #: view:account.move.line:0
 msgid "Posted Journal Items"
-msgstr "Verbuchte Buchungen"
+msgstr "Quittierte Buchungen"
 
 #. module: account
 #: view:account.tax.template:0
 msgid "Search Tax Templates"
-msgstr "Suche Steuervorlage"
+msgstr "Durchsuche Steuervorlagen"
 
 #. module: account
 #: model:ir.ui.menu,name:account.periodical_processing_journal_entries_validation
 msgid "Draft Entries"
-msgstr "Buchungen im Entwurf"
+msgstr "Buchungsentwürfe"
 
 #. module: account
 #: view:account.payment.term.line:0
@@ -4135,7 +4169,7 @@ msgstr "Tastenkombination (Shortcut)"
 #. module: account
 #: constraint:account.fiscalyear:0
 msgid "Error! The start date of the fiscal year must be before his end date."
-msgstr "Fehler! Der Beginn des Jahres muss vor dem Ende liegen."
+msgstr "Fehler! Der Beginn des Geschäftsjahres muss vor dem Ende liegen."
 
 #. module: account
 #: view:account.account:0
@@ -4156,7 +4190,7 @@ msgstr "Kontoart"
 #. module: account
 #: view:res.partner:0
 msgid "Bank Account Owner"
-msgstr "Bankkonto Eigentümer"
+msgstr "Bankkonto-Eigentümer"
 
 #. module: account
 #: report:account.account.balance:0
@@ -4194,8 +4228,8 @@ msgid ""
 "You haven't supplied enough argument to compute the initial balance, please "
 "select a period and journal in the context."
 msgstr ""
-"Sie haben nicht genug Angaben für die Berrechnung des Anfangssaldos gemacht. "
-"Wählen Sie bitte eine Periode und ein Journal!"
+"Sie haben unzureichende Angaben für die Berechnung des Anfangssaldos "
+"gemacht. Wählen Sie bitte eine Periode und ein Journal!"
 
 #. module: account
 #: model:process.transition,note:account.process_transition_supplieranalyticcost0
@@ -4216,12 +4250,12 @@ msgstr "Kassenabschluss"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,due_delay:0
 msgid "Avg. Due Delay"
-msgstr "Durch. Zahlungsverzug"
+msgstr "Durchschnittl. Zahlungsverzug"
 
 #. module: account
 #: view:account.entries.report:0
 msgid "Acc.Type"
-msgstr "Kontotyp"
+msgstr "Kontoart"
 
 #. module: account
 #: field:account.entries.report,month:0
@@ -4235,16 +4269,16 @@ msgid "Month"
 msgstr "Monat"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1216
+#: code:addons/account/account_move_line.py:1231
 #, python-format
 msgid ""
 "You can not do this modification on a confirmed entry! You can just change "
 "some non legal fields or you must unconfirm the journal entry first! \n"
 "%s"
 msgstr ""
-"Sie dürfen diese Ã„nderung nicht in verbuchten Buchungenmachen! \n"
+"Sie dürfen diese Ã„nderung nicht in quittierten Buchungen machen! \n"
 "Sei können nur einige buchungstechnisch nicht relevante Felder Ã¤ndern oder "
-"Sie müssen die Buchung vorher auf unbestätigt setzen.\n"
+"Sie müssen die Buchung vorher auf unquittiert zurücksetzen.\n"
 "%s"
 
 #. module: account
@@ -4255,7 +4289,7 @@ msgstr "PayPal Konto"
 #. module: account
 #: field:account.invoice.report,uom_name:0
 msgid "Reference UoM"
-msgstr "Referenz ME"
+msgstr "Bezugs-ME"
 
 #. module: account
 #: field:account.account,note:0
@@ -4278,7 +4312,7 @@ msgstr "Fällige Analytische Konten"
 #: code:addons/account/account.py:184
 #, python-format
 msgid "Balance Sheet (Liability account)"
-msgstr "Bilanz (Verbindlichkeit)"
+msgstr "Bilanz (Verbindlichkeiten)"
 
 #. module: account
 #: help:account.invoice,date_invoice:0
@@ -4293,10 +4327,10 @@ msgstr "Steuerbuchungen"
 #. module: account
 #: field:account.tax,base_code_id:0
 msgid "Account Base Code"
-msgstr "Steuergrundlage"
+msgstr "Bemessungsgrundlage (Steuern & Gebühren)"
 
 #. module: account
-#: code:addons/account/account_analytic_line.py:93
+#: code:addons/account/account_analytic_line.py:91
 #, python-format
 msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
 msgstr ""
@@ -4306,7 +4340,7 @@ msgstr ""
 #. module: account
 #: view:res.partner:0
 msgid "Customer Accounting Properties"
-msgstr "Debitoren Eigenschaften"
+msgstr "Debitoren-Eigenschaften"
 
 #. module: account
 #: help:res.company,paypal_account:0
@@ -4381,7 +4415,8 @@ msgstr "Periodische Buchungen"
 #. module: account
 #: constraint:account.analytic.line:0
 msgid "You can not create analytic line on view account."
-msgstr "Für Sichten dürfen keine Analysezeilen erzeugt werden"
+msgstr ""
+"Sicht-Konten dürfen (auch für) Analysebuchungen nicht bebucht werden."
 
 #. module: account
 #: help:account.move.line,state:0
@@ -4389,8 +4424,8 @@ msgid ""
 "When new move line is created the state will be 'Draft'.\n"
 "* When all the payments are done it will be in 'Valid' state."
 msgstr ""
-"Wenn die Buchung erzeugt wird, ist der Status 'Entwurf'.\n"
-"* Wenn alle Zahlungen erfolgt sind, wechselt der Status direkt zu 'Gebucht'."
+"Wenn die Buchung angelegt wird, ist der Status 'Entwurf'.\n"
+"* Wenn alle Zahlungen erfolgt sind, wechselt der Status auf 'Gebucht'."
 
 #. module: account
 #: field:account.journal,view_id:0
@@ -4516,7 +4551,7 @@ msgid "Allow Reconciliation"
 msgstr "Erlaube Ausgleich"
 
 #. module: account
-#: code:addons/account/account.py:1077
+#: code:addons/account/account.py:1082
 #, python-format
 msgid ""
 "You can not modify company of this period as some journal items exists."
@@ -4532,27 +4567,27 @@ msgstr "Auswertungen Analytisches Konto"
 #. module: account
 #: report:account.vat.declaration:0
 msgid "Based On"
-msgstr "Basiert auf"
+msgstr "Basierend auf"
 
 #. module: account
 #: field:account.tax,price_include:0
 #: field:account.tax.template,price_include:0
 msgid "Tax Included in Price"
-msgstr "Steuer Inklusive"
+msgstr "Preis inklusive Steuer"
 
 #. module: account
 #: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report
 msgid "Account Analytic Cost Ledger For Journal Report"
-msgstr "Analytisches Journal für Kosten"
+msgstr "Sammelkonto der Journale analytischer Kosten"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_model_form
 #: model:ir.ui.menu,name:account.menu_action_model_form
 msgid "Recurring Models"
-msgstr "Wiederkehrende Buchungen"
+msgstr "Wiederkehrende Modelle"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1251
+#: code:addons/account/account_move_line.py:1266
 #, python-format
 msgid "Encoding error"
 msgstr "Kodierungsfehler"
@@ -4564,8 +4599,9 @@ msgstr "4"
 
 #. module: account
 #: view:account.invoice:0
+#: xsl:account.transfer:0
 msgid "Change"
-msgstr "Ändere Währung"
+msgstr "Wechselgeld"
 
 #. module: account
 #: selection:account.journal,type:0
@@ -4580,7 +4616,7 @@ msgstr "Kontoarten Auswahl"
 #. module: account
 #: help:account.journal,default_credit_account_id:0
 msgid "It acts as a default account for credit amount"
-msgstr "Fungiert als Standard Konto für die Haben Buchung in diesem Journal"
+msgstr "Fungiert als Standardkonto für die Haben Buchung in diesem Journal"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_validate_account_move_line
@@ -4588,7 +4624,7 @@ msgstr "Fungiert als Standard Konto für die Haben Buchung in diesem Journal"
 #: view:validate.account.move:0
 #: view:validate.account.move.lines:0
 msgid "Post Journal Entries"
-msgstr "Buche Journaleinträge"
+msgstr "Quittiere Buchungen"
 
 #. module: account
 #: selection:account.invoice,state:0
@@ -4608,14 +4644,14 @@ msgid "Example"
 msgstr "Beispiel"
 
 #. module: account
-#: code:addons/account/account_invoice.py:828
+#: code:addons/account/account_invoice.py:839
 #, python-format
 msgid ""
 "Please verify the price of the invoice !\n"
 "The real total does not match the computed total."
 msgstr ""
-"Bitte Ã¼berprüfen Sie den Rechnungspreis !\n"
-"Dieser Wert entspricht nicht dem Gesamtbetrag der Rechnung."
+"Bitte Ã¼berprüfen Sie die Rechnungssumme!\n"
+"Dieser Wert entspricht nicht dem errechneten Gesamtbetrag der Rechnung."
 
 #. module: account
 #: view:account.tax:0
@@ -4624,17 +4660,17 @@ msgid "Keep empty to use the income account"
 msgstr "Leer lassen um das Erlöskonto zu nutzen"
 
 #. module: account
-#: code:addons/account/account.py:3299
+#: code:addons/account/account.py:3316
 #, python-format
 msgid "Purchase Tax %.2f%%"
-msgstr "Einkauf Steuer %.2f%%"
+msgstr "Vorsteuer %.2f%%"
 
 #. module: account
 #: view:account.subscription.generate:0
 #: model:ir.actions.act_window,name:account.action_account_subscription_generate
 #: model:ir.ui.menu,name:account.menu_generate_subscription
 msgid "Generate Entries"
-msgstr "Wiederkehrende Buchungen (Automatisch)"
+msgstr "Buchungen (Automatisch)"
 
 #. module: account
 #: help:account.vat.declaration,chart_tax_id:0
@@ -4646,13 +4682,13 @@ msgstr "Wähle Steuerkontenplan"
 #: field:account.fiscal.position,account_ids:0
 #: field:account.fiscal.position.template,account_ids:0
 msgid "Account Mapping"
-msgstr "Konten Zuordnung"
+msgstr "Kontenzuordnung"
 
 #. module: account
 #: selection:account.bank.statement.line,type:0
 #: view:account.invoice:0
 #: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:337
+#: code:addons/account/account_invoice.py:346
 #, python-format
 msgid "Customer"
 msgstr "Kunde"
@@ -4668,7 +4704,7 @@ msgid "Cancelled Invoice"
 msgstr "Stornierte Rechnung"
 
 #. module: account
-#: code:addons/account/account.py:1567
+#: code:addons/account/account.py:1584
 #, python-format
 msgid ""
 "Couldn't create move with currency different from the secondary currency of "
@@ -4707,7 +4743,7 @@ msgid ""
 "means you won't be able to modify their accounting fields anymore."
 msgstr ""
 "Alle Buchungen dieses Journals im Status 'Entwurf' werden gebucht. Hierdurch "
-"können Sie dann keine Buchungen mehr vorher abändern."
+"können Sie dann keine Buchungen mehr abändern."
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_finance_configuration
@@ -4725,7 +4761,7 @@ msgid "Income Account on Product Template"
 msgstr "Erlöskonto für Produktvorlage"
 
 #. module: account
-#: code:addons/account/account.py:3120
+#: code:addons/account/account.py:3137
 #, python-format
 msgid "MISC"
 msgstr "DIV"
@@ -4752,11 +4788,13 @@ msgstr "Neues Geschäftsjahr"
 #: view:account.invoice:0
 #: view:account.tax.template:0
 #: selection:account.vat.declaration,based_on:0
+#: code:addons/account/report/account_tax_report.py:68
 #: model:ir.actions.act_window,name:account.act_res_partner_2_account_invoice_opened
 #: model:ir.actions.act_window,name:account.action_invoice_tree
 #: model:ir.actions.report.xml,name:account.account_invoices
 #: view:report.invoice.created:0
 #: field:res.partner,invoice_ids:0
+#, python-format
 msgid "Invoices"
 msgstr "Rechnung"
 
@@ -4776,7 +4814,7 @@ msgstr "Schecks"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,user_id:0
 msgid "Salesman"
-msgstr "Mitarbeiter"
+msgstr "Verkäufer"
 
 #. module: account
 #: view:account.invoice.report:0
@@ -4786,12 +4824,12 @@ msgstr "Abgerechnet"
 #. module: account
 #: view:account.move:0
 msgid "Posted Journal Entries"
-msgstr "Verbuchte Buchungen"
+msgstr "Quittierte Buchungen"
 
 #. module: account
 #: view:account.use.model:0
 msgid "Use Model"
-msgstr "Benutze Buchungsvorlage"
+msgstr "Benutze Modellvorlage"
 
 #. module: account
 #: help:account.invoice,partner_bank_id:0
@@ -4801,9 +4839,9 @@ msgid ""
 "Partner bank account number."
 msgstr ""
 "Bankkonto für die Zahlung\r\n"
-"* Kundenrechnungen und Lieferantengutschriften: Ein Bankkonto des "
+"* Bei Kundenrechnungen und Lieferantengutschriften ein Bankkonto des "
 "Unternehmens\r\n"
-"* sonst: ein Bankkonto des Partners"
+"* ansonsten ein Bankkonto des Partners"
 
 #. module: account
 #: view:account.state.open:0
@@ -4813,7 +4851,7 @@ msgstr "Nein"
 #. module: account
 #: help:account.invoice.tax,tax_code_id:0
 msgid "The tax basis of the tax declaration."
-msgstr "Die Steuerbasis in der Steuererklärung"
+msgstr "Die Steuergrundlage in der Steuererklärung"
 
 #. module: account
 #: view:account.addtmpl.wizard:0
@@ -4824,7 +4862,7 @@ msgstr "Hinzufügen"
 #: selection:account.invoice,state:0
 #: report:account.overdue:0
 msgid "Paid"
-msgstr "bezahlt"
+msgstr "Bezahlt"
 
 #. module: account
 #: view:account.period.close:0
@@ -4839,7 +4877,7 @@ msgstr "Der Bankauszug für den Bankausgleich"
 #. module: account
 #: model:process.transition,note:account.process_transition_suppliercustomerinvoice0
 msgid "Draft invoices are validated. "
-msgstr "Rechnungen im Entwurf wurden gebucht. "
+msgstr "Rechnungentwürfe wurden genehmigt. "
 
 #. module: account
 #: constraint:account.account.template:0
@@ -4860,7 +4898,7 @@ msgstr "Eröffnungsperiode"
 #. module: account
 #: view:account.move:0
 msgid "Journal Entries to Review"
-msgstr "Buchungen zu Ã¼berprüfen"
+msgstr "Zu prüfende Buchungen"
 
 #. module: account
 #: view:account.bank.statement:0
@@ -4896,29 +4934,27 @@ msgstr "Steuer Anwendung"
 #: model:ir.ui.menu,name:account.menu_eaction_account_moves_sale
 #, python-format
 msgid "Journal Items"
-msgstr "Journal Zeilen"
+msgstr "Buchungen"
 
 #. module: account
-#: code:addons/account/account.py:1088
-#: code:addons/account/account.py:1090
-#: code:addons/account/account.py:1321
-#: code:addons/account/account.py:1563
-#: code:addons/account/account.py:1567
-#: code:addons/account/account.py:3368
-#: code:addons/account/account_move_line.py:807
-#: code:addons/account/account_move_line.py:830
-#: code:addons/account/account_move_line.py:832
-#: code:addons/account/account_move_line.py:835
-#: code:addons/account/account_move_line.py:837
+#: code:addons/account/account.py:1095
+#: code:addons/account/account.py:1097
+#: code:addons/account/account.py:1329
+#: code:addons/account/account.py:1580
+#: code:addons/account/account.py:1584
+#: code:addons/account/account.py:3385
+#: code:addons/account/account_move_line.py:823
+#: code:addons/account/account_move_line.py:843
+#: code:addons/account/account_move_line.py:846
 #: code:addons/account/report/common_report_header.py:92
 #: code:addons/account/wizard/account_change_currency.py:38
 #: code:addons/account/wizard/account_change_currency.py:59
 #: code:addons/account/wizard/account_change_currency.py:64
 #: code:addons/account/wizard/account_change_currency.py:70
-#: code:addons/account/wizard/account_financial_report.py:69
+#: code:addons/account/wizard/account_financial_report.py:70
 #: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_report_common.py:144
-#: code:addons/account/wizard/account_report_common.py:150
+#: code:addons/account/wizard/account_report_common.py:145
+#: code:addons/account/wizard/account_report_common.py:151
 #, python-format
 msgid "Error"
 msgstr "Fehler"
@@ -4930,7 +4966,7 @@ msgstr "Fehler"
 #: field:account.analytic.inverted.balance,date2:0
 #: field:account.analytic.journal.report,date2:0
 msgid "End of period"
-msgstr "Ende Periode"
+msgstr "Periodenende"
 
 #. module: account
 #: view:res.partner:0
@@ -4943,8 +4979,8 @@ msgid ""
 "This report is analysis by partner. It is a PDF report containing one line "
 "per partner representing the cumulative credit balance."
 msgstr ""
-"Der Report erzeugt Analysen nach Partner. Es handelt sich dabei um einen pdf "
-"Report mit jeweils einer Zeile für den Partner"
+"Der Report erzeugt Analysen nach Partner. Es handelt sich dabei um einen PDF-"
+"Report mit jeweils einer Zeile pro Partner"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_analytic_journal_tree
@@ -5010,7 +5046,7 @@ msgstr "Verkaufsjournal in diesem Monat"
 #: model:ir.actions.act_window,name:account.action_account_vat_declaration
 #: model:ir.model,name:account.model_account_vat_declaration
 msgid "Account Vat Declaration"
-msgstr "Auswertung Umsatzsteuer"
+msgstr "Umsatzsteuererklärung (-voranmeldung)"
 
 #. module: account
 #: report:account.invoice:0
@@ -5020,15 +5056,15 @@ msgstr "Preis"
 #. module: account
 #: view:account.period:0
 msgid "To Close"
-msgstr "Zu Beendigen"
+msgstr "Abzuschließen"
 
 #. module: account
 #: field:account.treasury.report,date:0
 msgid "Beginning of Period Date"
-msgstr "Beginn Periode"
+msgstr "Datum des Periodebeginns"
 
 #. module: account
-#: code:addons/account/account.py:1351
+#: code:addons/account/account.py:1361
 #, python-format
 msgid ""
 "You can not modify a posted entry of this journal !\n"
@@ -5047,18 +5083,18 @@ msgstr "Vorlagen"
 #. module: account
 #: field:account.invoice.tax,name:0
 msgid "Tax Description"
-msgstr "Steuer Beschreibung"
+msgstr "Steuerbezeichnung"
 
 #. module: account
 #: field:account.tax,child_ids:0
 msgid "Child Tax Accounts"
-msgstr "untergeordnete Steuerkonten"
+msgstr "Untergeordnete Steuerkonten"
 
 #. module: account
-#: code:addons/account/account.py:1090
+#: code:addons/account/account.py:1097
 #, python-format
 msgid "Start period should be smaller then End period"
-msgstr "Beginn der Periode sollte kleiner sein als Ende der Periode"
+msgstr "Periodenbeginn muss vor dem Periodenende liegen"
 
 #. module: account
 #: help:account.tax,price_include:0
@@ -5067,7 +5103,7 @@ msgid ""
 "Check this if the price you use on the product and invoices includes this "
 "tax."
 msgstr ""
-"Aktivieren, wenn der Preis bei Produkt und Rechnung die Steuer beinhaltet"
+"Aktivieren, wenn der Preis bei Produkt und Rechnung diese Steuer beinhaltet"
 
 #. module: account
 #: report:account.analytic.account.balance:0
@@ -5077,6 +5113,7 @@ msgstr "Saldo (Anal.)"
 #. module: account
 #: report:account.account.balance:0
 #: field:account.aged.trial.balance,target_move:0
+#: report:account.aged_trial_balance:0
 #: field:account.balance.report,target_move:0
 #: report:account.central.journal:0
 #: field:account.central.journal,target_move:0
@@ -5120,8 +5157,10 @@ msgstr "Periodentyp"
 #: view:account.invoice:0
 #: field:account.invoice,payment_ids:0
 #: selection:account.vat.declaration,based_on:0
+#: code:addons/account/report/account_tax_report.py:70
+#, python-format
 msgid "Payments"
-msgstr "Anzeige Zahlungen"
+msgstr "Zahlungen"
 
 #. module: account
 #: view:account.tax:0
@@ -5198,7 +5237,7 @@ msgid "Line 1:"
 msgstr "Zeile 1:"
 
 #. module: account
-#: code:addons/account/account.py:1307
+#: code:addons/account/account.py:1315
 #, python-format
 msgid "Integrity Error !"
 msgstr "Integritätsfehler!"
@@ -5216,7 +5255,7 @@ msgstr "Monat"
 #. module: account
 #: field:account.partner.reconcile.process,next_partner_id:0
 msgid "Next Partner to Reconcile"
-msgstr "Nächster Partner für Offene Posten Ausgleich"
+msgstr "Nächster Partner zum Ausgleich offener Posten"
 
 #. module: account
 #: field:account.invoice.tax,account_id:0
@@ -5231,6 +5270,7 @@ msgstr "Ergebnis Kontoabstimmung"
 
 #. module: account
 #: model:account.financial.report,name:account.account_financial_report_balancesheet0
+#: model:ir.actions.act_window,name:account.action_account_report_bs
 #: model:ir.ui.menu,name:account.menu_account_report_bs
 msgid "Balance Sheet"
 msgstr "Bilanz"
@@ -5295,7 +5335,7 @@ msgstr "Verkauf"
 #. module: account
 #: view:account.financial.report:0
 msgid "Report"
-msgstr "Report"
+msgstr "Bericht"
 
 #. module: account
 #: view:account.analytic.line:0
@@ -5307,6 +5347,7 @@ msgstr "Report"
 #: view:account.move.line:0
 #: field:account.tax,amount:0
 #: field:account.tax.template,amount:0
+#: xsl:account.transfer:0
 #: view:analytic.entries.report:0
 #: field:analytic.entries.report,amount:0
 msgid "Amount"
@@ -5320,7 +5361,7 @@ msgstr "Betrag"
 #: model:process.transition,name:account.process_transition_suppliervalidentries0
 #: model:process.transition,name:account.process_transition_validentries0
 msgid "Validation"
-msgstr "Buchung"
+msgstr "Prüfung"
 
 #. module: account
 #: field:account.tax,child_depend:0
@@ -5331,7 +5372,7 @@ msgstr "Steuer auf untergeordnete Datensätze"
 #. module: account
 #: model:ir.model,name:account.model_account_fiscal_position_tax_template
 msgid "Template Tax Fiscal Position"
-msgstr "Steuer Zuordnung Vorlage"
+msgstr "Vorlage zur Steuerzuordnung in der Bilanz"
 
 #. module: account
 #: field:account.journal,update_posted:0
@@ -5356,7 +5397,7 @@ msgstr "Personenkonto"
 #. module: account
 #: view:account.bank.statement:0
 msgid "Transaction"
-msgstr "Transaktion"
+msgstr "Geschäftsvorfall"
 
 #. module: account
 #: help:account.tax,base_code_id:0
@@ -5368,7 +5409,7 @@ msgstr "Transaktion"
 #: help:account.tax.template,ref_tax_code_id:0
 #: help:account.tax.template,tax_code_id:0
 msgid "Use this code for the VAT declaration."
-msgstr "Benutze diese ID für die Ust. - Voranmeldung"
+msgstr "Benutze diese ID für die Umsatzsteuervoranmeldung"
 
 #. module: account
 #: field:account.partner.reconcile.process,progress:0
@@ -5383,7 +5424,7 @@ msgstr "Analyt.  Buchungen Statistik"
 #. module: account
 #: field:wizard.multi.charts.accounts,bank_accounts_id:0
 msgid "Cash and Banks"
-msgstr "Geld und Banken"
+msgstr "Bargeld und Banken"
 
 #. module: account
 #: model:ir.model,name:account.model_account_installer
@@ -5393,7 +5434,7 @@ msgstr "account.installer"
 #. module: account
 #: field:account.tax.template,include_base_amount:0
 msgid "Include in Base Amount"
-msgstr "In Basis Betrag inkludieren"
+msgstr "In Grundbetrag einbeziehen"
 
 #. module: account
 #: help:account.payment.term.line,days:0
@@ -5401,7 +5442,7 @@ msgid ""
 "Number of days to add before computation of the day of month.If Date=15/01, "
 "Number of Days=22, Day of Month=-1, then the due date is 28/02."
 msgstr ""
-"Anzahl der Tage befor das Monatsende berechnet wird. \r\n"
+"Anzahl der zu addierenden Tage bevor das Monatsende berechnet wird. \r\n"
 "Datum = 15.1\r\n"
 "Anzahl Tage = 22\r\n"
 "Tag des Monats = -1\r\n"
@@ -5492,22 +5533,22 @@ msgid "End of Year Entries Journal"
 msgstr "Journal Eröffnungsbuchungen"
 
 #. module: account
-#: code:addons/account/account.py:3446
+#: code:addons/account/account.py:3463
 #: code:addons/account/account_bank_statement.py:338
-#: code:addons/account/account_invoice.py:427
-#: code:addons/account/account_invoice.py:527
-#: code:addons/account/account_invoice.py:542
-#: code:addons/account/account_invoice.py:550
-#: code:addons/account/account_invoice.py:572
+#: code:addons/account/account_invoice.py:436
+#: code:addons/account/account_invoice.py:536
+#: code:addons/account/account_invoice.py:551
+#: code:addons/account/account_invoice.py:559
+#: code:addons/account/account_invoice.py:581
 #: code:addons/account/wizard/account_move_journal.py:63
 #, python-format
 msgid "Configuration Error !"
-msgstr "Fehler Konfiguration !"
+msgstr "Konfigurationsfehler!"
 
 #. module: account
 #: field:account.payment.term.line,value_amount:0
 msgid "Amount To Pay"
-msgstr "Zahlungsbetrag"
+msgstr "Zahlbetrag"
 
 #. module: account
 #: help:account.partner.reconcile.process,to_reconcile:0
@@ -5522,12 +5563,12 @@ msgstr ""
 #. module: account
 #: view:account.subscription.line:0
 msgid "Subscription lines"
-msgstr "Automatische Buchungen"
+msgstr "Automatische Wiederholungs-Buchungen"
 
 #. module: account
 #: field:account.entries.report,quantity:0
 msgid "Products Quantity"
-msgstr "Produkt Menge"
+msgstr "Produktmenge"
 
 #. module: account
 #: view:account.entries.report:0
@@ -5536,7 +5577,7 @@ msgstr "Produkt Menge"
 #: selection:account.move,state:0
 #: view:account.move.line:0
 msgid "Unposted"
-msgstr "Nicht gebucht"
+msgstr "Nicht quittiert"
 
 #. module: account
 #: view:account.change.currency:0
@@ -5559,7 +5600,7 @@ msgstr "Buchungen"
 #. module: account
 #: view:account.invoice:0
 msgid "Payment Date"
-msgstr "Datum Zahlung"
+msgstr "Zahlungsdatum"
 
 #. module: account
 #: view:account.analytic.account:0
@@ -5588,13 +5629,13 @@ msgid ""
 "Specified Journal does not have any account move entries in draft state for "
 "this period"
 msgstr ""
-"Spezielles Journal hat keine Buchungspositionen im Entwurfsstadium für diese "
-"Periode."
+"Angegebenes Journal enthält keine Buchungspositionen im Entwurfsstadium für "
+"diese Periode."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_view_move_line
 msgid "Lines to reconcile"
-msgstr "Auszugleichende Buchungen"
+msgstr "Zu begleichende Buchungen"
 
 #. module: account
 #: report:account.analytic.account.balance:0
@@ -5604,6 +5645,8 @@ msgstr "Auszugleichende Buchungen"
 #: field:account.invoice.line,quantity:0
 #: field:account.model.line,quantity:0
 #: field:account.move.line,quantity:0
+#: selection:account.tax,type:0
+#: selection:account.tax.template,type:0
 #: view:analytic.entries.report:0
 #: field:analytic.entries.report,unit_amount:0
 #: field:report.account.sales,quantity:0
@@ -5637,9 +5680,9 @@ msgid ""
 "Number of partial amounts that can be combined to find a balance point can "
 "be chosen as the power of the automatic reconciliation"
 msgstr ""
-"Anzahl der maximalen Teilbeträge die für einen gegenseitigen Ausgleich von "
-"Rechnungen und Zahlungen  kombiniert werden dürfen, um automatisch eine "
-"Saldenausgleich für das ausgewählte Konto herbeizuführen."
+"Anzahl der gleichen Teilbeträge die, in der Summe, zum Ausgleich von "
+"Rechnungen aufgebracht werden müssen, um die Stärke des automatischen "
+"Saldenausgleichs für das ausgewählte Konto zu nutzen."
 
 #. module: account
 #: help:account.payment.term.line,sequence:0
@@ -5647,14 +5690,14 @@ msgid ""
 "The sequence field is used to order the payment term lines from the lowest "
 "sequences to the higher ones"
 msgstr ""
-"Die Sequenz Feld wird benutzt, um in diesem Fall die Zahlungsbedingungen von "
-"der geringsten Sequenz zu höheren Sequenzen sukzessiv durchzuführen."
+"Die Sequenz Feld wird benutzt, um die Zahlungsbedingungen von der geringsten "
+"Sequenz- bzw. Folgennummer beginnend zu sortieren."
 
 #. module: account
 #: view:account.fiscal.position.template:0
 #: field:account.fiscal.position.template,name:0
 msgid "Fiscal Position Template"
-msgstr "Steuerzuordnung Vorlage"
+msgstr "Bilanz-Vorlage"
 
 #. module: account
 #: view:account.analytic.chart:0
@@ -5672,10 +5715,10 @@ msgid ""
 "finalize your end of year results definitive "
 msgstr ""
 "Wenn keine weiteren Buchungen für dieses Geschäftsjahr generiert werden "
-"sollen können Sie das Jahr abschliessen. Hierdurch werden alle noch offenen "
-"Perioden beendet, wodurch weitere Buchungen in diesem Jahr nicht mehr "
-"möglich sind. Beenden Sie das Jahr erst, wenn Sie definitv keine weiteren "
-"Buchungen mehr tätigen müssen. "
+"sollen, können Sie das Jahr abschliessen. Hierdurch werden alle noch offenen "
+"Perioden beendet. Weitere Buchungen in diesem Jahr sind nicht mehr möglich. "
+"Beenden Sie das Jahr erst, wenn Sie definitv keine weiteren Buchungen mehr "
+"tätigen müssen. "
 
 #. module: account
 #: field:account.central.journal,amount_currency:0
@@ -5704,18 +5747,19 @@ msgid ""
 "No fiscal year defined for this date !\n"
 "Please create one from the configuration of the accounting menu."
 msgstr ""
-"Es gibt kein Geschäftsjahr für dieses Datum !\n"
+"Es ist kein Geschäftsjahr für dieses Datum angelegt!\n"
 "Bitte legen Sie ein Geschäftsjahr im Konfigurationsmenü des Finanzbereiches "
 "an."
 
 #. module: account
 #: view:account.move.line.reconcile:0
 msgid "Reconcile With Write-Off"
-msgstr "Ausgleichen mit Abschreibung"
+msgstr "Ausgleichen durch Abschreibung"
 
 #. module: account
 #: selection:account.payment.term.line,value:0
 #: selection:account.tax,type:0
+#: selection:account.tax.template,type:0
 msgid "Fixed Amount"
 msgstr "Fester Betrag"
 
@@ -5752,13 +5796,14 @@ msgid "Generate Opening Entries"
 msgstr "Erstelle Vortragsbuchungen"
 
 #. module: account
-#: code:addons/account/account_move_line.py:759
+#: code:addons/account/account_move_line.py:775
 #, python-format
 msgid "Already Reconciled!"
 msgstr "Bereits ausgeglichen"
 
 #. module: account
 #: help:account.tax,type:0
+#: help:account.tax.template,type:0
 msgid "The computation method for the tax amount."
 msgstr "Die Berechnungsmethode für die Höhe der Steuern."
 
@@ -5785,14 +5830,14 @@ msgid "Child Accounts"
 msgstr "untergeordnete Konten"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1229
 #, python-format
 msgid "Move name (id): %s (%s)"
 msgstr "Buchungsnummer (id): %s  (%s)"
 
 #. module: account
 #: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:857
+#: code:addons/account/account_move_line.py:871
 #, python-format
 msgid "Write-Off"
 msgstr "Abschreibung"
@@ -5812,7 +5857,7 @@ msgstr "Erlöse"
 #: selection:account.bank.statement.line,type:0
 #: view:account.invoice:0
 #: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:339
+#: code:addons/account/account_invoice.py:348
 #, python-format
 msgid "Supplier"
 msgstr "Lieferant"
@@ -5842,7 +5887,7 @@ msgid "Account n°"
 msgstr "Kontonummer"
 
 #. module: account
-#: code:addons/account/account_invoice.py:88
+#: code:addons/account/account_invoice.py:91
 #, python-format
 msgid "Free Reference"
 msgstr "Freie Referenz"
@@ -5857,7 +5902,9 @@ msgstr "Berechnungsform"
 #: selection:account.common.partner.report,result_selection:0
 #: selection:account.partner.balance,result_selection:0
 #: selection:account.partner.ledger,result_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:376
 #: code:addons/account/report/account_partner_balance.py:301
+#: code:addons/account/report/account_partner_ledger.py:398
 #, python-format
 msgid "Receivable and Payable Accounts"
 msgstr "Debitoren und Kreditoren"
@@ -5876,12 +5923,12 @@ msgstr "Status Offen"
 #. module: account
 #: report:account.analytic.account.quantity_cost_ledger:0
 msgid "Max Qty:"
-msgstr "Max. Menge"
+msgstr "Max. Menge:"
 
 #. module: account
 #: view:account.invoice.refund:0
 msgid "Refund Invoice"
-msgstr "Gutschrift Rechnung"
+msgstr "Rechnungsgutschrift"
 
 #. module: account
 #: field:account.invoice,address_invoice_id:0
@@ -5895,10 +5942,10 @@ msgid ""
 "document shows your debit and credit taking in consideration some criteria "
 "you can choose by using the search tool."
 msgstr ""
-"Durch diese Ansicht können Sie multidimensionale Ansichten auf Ihre "
-"Finanzkonten vornehmen. Diese Perspektive zeigt Ihnen Ihre Salden und "
-"Verkehrszahlen sowie diverse andere Kriterien und Werte die beim Suchdialog "
-"gewählt werden können."
+"Durch diese Ansicht erhalten Sie mehrdimensionale Ansichten auf Ihre "
+"Finanzkonten. Diese Perspektive zeigt Ihnen Ihre Salden und Verkehrszahlen "
+"sowie diverse andere Kriterien und Werte die im Auswahldialog gewählt werden "
+"können."
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_tax_code_list
@@ -5907,9 +5954,9 @@ msgid ""
 "OpenERP allows you to define the tax structure and manage it from this menu. "
 "You can define both numeric and alphanumeric tax codes."
 msgstr ""
-"Die Definition der Umsatzsteuern richtet sich nach der im jeweiligen Land "
-"gültigen Regelung für die Abgabe von Steuererklärungen OpenERP ermöglicht "
-"Ihnen dabei die Struktur der Steuern zu definieren und Ã¼ber dieses Menü zu "
+"Die Definition der Steuern richtet sich nach der im jeweiligen Land gültigen "
+"Regelung für die Abgabe von Steuererklärungen. OpenERP ermöglicht Ihnen "
+"dabei die Struktur der Steuern zu definieren und Ã¼ber dieses Menü zu "
 "verwalten. Sie können sowohl numerische als auch alphanumerische "
 "Zeichenfolgen für die Definition verwenden."
 
@@ -5931,8 +5978,8 @@ msgid ""
 "that you should have your last line with the type 'Balance' to ensure that "
 "the whole amount will be threated."
 msgstr ""
-"Wählen Sie hier die Berechnungsart dieser Zeile Ihrer Zahlungsbedingung. Sie "
-"sollten dabei mindestens eine letzte Zeile mit der Berechnungsart "
+"Wählen Sie hier die Berechnungsart dieser Position Ihrer Zahlungsbedingung. "
+"Sie sollten dabei mindestens eine letzte Zeile mit der Berechnungsart "
 "'Saldoausgleich' definiert haben."
 
 #. module: account
@@ -5947,7 +5994,7 @@ msgstr "Erzwinge Periode"
 #: view:account.invoice.report:0
 #: field:account.invoice.report,nbr:0
 msgid "# of Lines"
-msgstr "# Positionen"
+msgstr "Anz. Positionen"
 
 #. module: account
 #: field:account.aged.trial.balance,filter:0
@@ -5969,10 +6016,10 @@ msgid "Filter by"
 msgstr "Filter durch"
 
 #. module: account
-#: code:addons/account/account.py:2256
+#: code:addons/account/account.py:2273
 #, python-format
 msgid "You have a wrong expression \"%(...)s\" in your model !"
-msgstr "Sie haben einen falschen Ausdruck \"%(...)s\" in Ihrem  Model !"
+msgstr "Sie haben einen falschen Ausdruck \"%(...)s\" in Ihrem  Modell!"
 
 #. module: account
 #: field:account.bank.statement.line,date:0
@@ -5980,8 +6027,8 @@ msgid "Entry Date"
 msgstr "Buchungsdatum"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1155
-#: code:addons/account/account_move_line.py:1238
+#: code:addons/account/account_move_line.py:1170
+#: code:addons/account/account_move_line.py:1253
 #, python-format
 msgid "You can not use an inactive account!"
 msgstr "Sie können kein inaktives Konto verwenden!"
@@ -6010,7 +6057,7 @@ msgstr "Die aktuelle Währung ist nicht richtig konfiguriert!"
 #: field:account.tax,account_collected_id:0
 #: field:account.tax.template,account_collected_id:0
 msgid "Invoice Tax Account"
-msgstr "Rechnung Steuerkonto"
+msgstr "Konto der Rechnungssteuer"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_general_journal
@@ -6024,12 +6071,12 @@ msgid "Number of Days"
 msgstr "Anzahl Tage"
 
 #. module: account
-#: code:addons/account/account_bank_statement.py:402
-#: code:addons/account/account_invoice.py:392
+#: code:addons/account/account_bank_statement.py:403
+#: code:addons/account/account_invoice.py:401
 #: code:addons/account/wizard/account_period_close.py:51
 #, python-format
 msgid "Invalid action !"
-msgstr "Fehlerhafte Aktion"
+msgstr "Ungültige Aktion!"
 
 #. module: account
 #: code:addons/account/wizard/account_move_journal.py:102
@@ -6045,13 +6092,13 @@ msgstr "Ãœberprüfen Sie Ihre Finanzjournale"
 #. module: account
 #: help:account.tax,name:0
 msgid "This name will be displayed on reports"
-msgstr "Dieser Name wird in Reports angezeigt"
+msgstr "Dieser Name wird in Berichten angezeigt"
 
 #. module: account
 #: report:account.analytic.account.cost_ledger:0
 #: report:account.analytic.account.quantity_cost_ledger:0
 msgid "Printing date"
-msgstr "Datum Druck"
+msgstr "Druckdatum"
 
 #. module: account
 #: selection:account.account.type,close_method:0
@@ -6079,7 +6126,7 @@ msgstr "Fremdwährung Saldo"
 #. module: account
 #: field:account.journal.period,name:0
 msgid "Journal-Period Name"
-msgstr "Journal Periode Bezeichnung"
+msgstr "Bezeichnung der Journal-Periode"
 
 #. module: account
 #: field:account.invoice.tax,factor_base:0
@@ -6087,7 +6134,7 @@ msgid "Multipication factor for Base code"
 msgstr "Multiplikationsfaktor für Steuergrundbetrag"
 
 #. module: account
-#: code:addons/account/wizard/account_report_common.py:150
+#: code:addons/account/wizard/account_report_common.py:151
 #, python-format
 msgid "not implemented"
 msgstr "nicht implementiert"
@@ -6105,27 +6152,29 @@ msgid ""
 "Forma' state!"
 msgstr ""
 "Ausgewählte Rechnung kann nicht bestätigt werden bevor Sie nicht im Status "
-"'Entwurf' oder 'Pro Forma' ist !"
+"'Entwurf' oder 'Proforma' ist !"
 
 #. module: account
 #: view:account.subscription:0
 msgid "Running Subscription"
-msgstr "aktuelle Abonnements"
+msgstr "Laufende Abonnements"
 
 #. module: account
 #: report:account.invoice:0
 msgid "Fiscal Position Remark :"
-msgstr "Hinweis Steuerzuordnung"
+msgstr "Hinweis zum Finanzbericht:"
 
 #. module: account
 #: view:analytic.entries.report:0
 #: model:ir.actions.act_window,name:account.action_analytic_entries_report
 #: model:ir.ui.menu,name:account.menu_action_analytic_entries_report
 msgid "Analytic Entries Analysis"
-msgstr "Statistik Analysebuchungen"
+msgstr "Statistik der Analysebuchungen"
 
 #. module: account
 #: selection:account.aged.trial.balance,direction_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:381
+#, python-format
 msgid "Past"
 msgstr "Vergangenheit"
 
@@ -6137,7 +6186,7 @@ msgid ""
 "\"View\"! "
 msgstr ""
 "Konfigurationsfehler!\n"
-"Das Ã¼bergeordnete Konto muss den Typ View haben. "
+"Das Ã¼bergeordnete Konto muss den Typ Sicht haben. "
 
 #. module: account
 #: help:res.partner.bank,journal_id:0
@@ -6156,7 +6205,7 @@ msgstr "Buchung Analysekonto"
 #: view:res.company:0
 #: field:res.company,overdue_msg:0
 msgid "Overdue Payments Message"
-msgstr "Text Zahlungserinnerung"
+msgstr "Nachricht der Zahlungserinnerung"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_moves_all_a
@@ -6194,13 +6243,13 @@ msgid ""
 "(i.e. paid) in the system."
 msgstr ""
 "Sobald der Zahlungsausgleich erfolgt ist, wechselt der Status der Rechnung "
-"zu 'Erledigt' ( d.h. Bezahlt)."
+"zu 'Erledigt' (d. h. Bezahlt)."
 
 #. module: account
 #: view:account.chart.template:0
 #: field:account.chart.template,account_root_id:0
 msgid "Root Account"
-msgstr "Oberstes Konto"
+msgstr "Stammkonto"
 
 #. module: account
 #: field:res.partner,last_reconciliation_date:0
@@ -6215,7 +6264,7 @@ msgstr "Analytische Buchung"
 #. module: account
 #: field:product.template,taxes_id:0
 msgid "Customer Taxes"
-msgstr "Produkt Steuern"
+msgstr "Umsatzsteuern"
 
 #. module: account
 #: help:account.model,name:0
@@ -6236,7 +6285,7 @@ msgstr "Erstelle ein Konto auf Basis der Vorlage"
 #: view:account.account.type:0
 #: view:account.tax.code:0
 msgid "Reporting Configuration"
-msgstr "Konfiguration Auswertungen"
+msgstr "Berichtseinstellungen"
 
 #. module: account
 #: field:account.tax,type:0
@@ -6248,7 +6297,7 @@ msgstr "Steuerart"
 #: model:ir.actions.act_window,name:account.action_account_template_form
 #: model:ir.ui.menu,name:account.menu_action_account_template_form
 msgid "Account Templates"
-msgstr "Konto Vorlagen"
+msgstr "Konto-Vorlagen"
 
 #. module: account
 #: help:wizard.multi.charts.accounts,complete_tax_set:0
@@ -6258,14 +6307,14 @@ msgid ""
 "choice assumes that the set of tax defined for the chosen template is "
 "complete"
 msgstr ""
-"Diese Auswähl erlaubt Ihnen die Einkaufs und Verkaufssteuern zu definieren "
+"Diese Auswähl erlaubt Ihnen die Einkaufs- und Verkaufssteuern zu definieren "
 "oder aus einer Liste auszuwählen. Letzteres setzt voraus, dass die Vorlage "
-"komplett ist."
+"vollständig ist."
 
 #. module: account
 #: report:account.vat.declaration:0
 msgid "Tax Statement"
-msgstr "Auswertung Steueranmeldung"
+msgstr "Steueranmeldung"
 
 #. module: account
 #: model:ir.model,name:account.model_res_company
@@ -6289,13 +6338,13 @@ msgid ""
 "You can not remove/desactivate an account which is set on a customer or "
 "supplier."
 msgstr ""
-"Sie können dieses Konto nicht deaktivieren oder löschen, da es bei einem "
-"Kunden oder Lieferanten verwendet wird."
+"Sie können dieses Konto nicht deaktivieren oder löschen, da es einem Kunden "
+"oder Lieferanten zugeordnet ist."
 
 #. module: account
 #: help:account.fiscalyear.close.state,fy_id:0
 msgid "Select a fiscal year to close"
-msgstr "Wähle Geschäftsjahr für Beendigung"
+msgstr "Wähle abzuschließendes Geschäftsjahr"
 
 #. module: account
 #: help:account.chart.template,tax_template_ids:0
@@ -6310,7 +6359,7 @@ msgstr "IntraCom"
 #. module: account
 #: view:account.move.line.reconcile.writeoff:0
 msgid "Information addendum"
-msgstr "Informationsbeilage"
+msgstr "Informationsanhang"
 
 #. module: account
 #: field:account.chart,fiscalyear:0
@@ -6320,7 +6369,7 @@ msgstr "Geschäftsjahr"
 #. module: account
 #: view:account.move.reconcile:0
 msgid "Partial Reconcile Entries"
-msgstr "Teilausgleich Rechnungen"
+msgstr "Rechnungen mit Teilzahlungen"
 
 #. module: account
 #: view:account.addtmpl.wizard:0
@@ -6375,7 +6424,7 @@ msgstr "Debitor"
 #. module: account
 #: constraint:account.move.line:0
 msgid "Company must be the same for its related account and period."
-msgstr "Company must be the same for its related account and period."
+msgstr "Das Unternehmen muss für Konto wie auch Periode das gleiche sein."
 
 #. module: account
 #: view:account.invoice:0
@@ -6400,15 +6449,16 @@ msgstr "Aktuell"
 #. module: account
 #: view:account.bank.statement:0
 msgid "CashBox"
-msgstr "Kassenbuch"
+msgstr "Barkasse"
 
 #. module: account
 #: model:account.account.type,name:account.account_type_cash_equity
 msgid "Equity"
-msgstr "Eigenkapital"
+msgstr "Buchwert"
 
 #. module: account
 #: selection:account.tax,type:0
+#: selection:account.tax.template,type:0
 msgid "Percentage"
 msgstr "Prozentsatz"
 
@@ -6420,13 +6470,13 @@ msgstr "Journal & Partner"
 #. module: account
 #: field:account.automatic.reconcile,power:0
 msgid "Power"
-msgstr "Power"
+msgstr "Stärke"
 
 #. module: account
-#: code:addons/account/account.py:3368
+#: code:addons/account/account.py:3385
 #, python-format
 msgid "Cannot generate an unused journal code."
-msgstr "Kann keine nicht verwendeten Journal Code erzeugen."
+msgstr "Kann keinen nicht verwendeten Journal Code erzeugen."
 
 #. module: account
 #: view:project.account.analytic.line:0
@@ -6445,8 +6495,8 @@ msgid ""
 "Indicates if the amount of tax must be included in the base amount for the "
 "computation of the next taxes"
 msgstr ""
-"Anzeige, inwieweit diese Steuer im Steuergrundbetrag für die weitere "
-"Berechnung inbegriffen ist, oder nicht."
+"Anzeige, inwieweit diese Steuer im Grundbetrag für die weitere Berechnung "
+"enthalten sein muß, oder nicht."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_partner_reconcile
@@ -6462,12 +6512,12 @@ msgstr "Umgekehrter Saldo (Anal.)"
 #. module: account
 #: field:account.tax.template,applicable_type:0
 msgid "Applicable Type"
-msgstr "Anwendb. Typ"
+msgstr "Anwendbare Art"
 
 #. module: account
 #: field:account.invoice.line,invoice_id:0
 msgid "Invoice Reference"
-msgstr "Rechnungsreferenz"
+msgstr "Rechnungsbezug"
 
 #. module: account
 #: help:account.tax.template,sequence:0
@@ -6476,16 +6526,16 @@ msgid ""
 "higher ones. The order is important if you have a tax that has several tax "
 "children. In this case, the evaluation order is important."
 msgstr ""
-"Die Sequenz ist für die Sortierung einzelner Steuerpositionen. Die Sequenz "
-"ist wichtig, wenn es mehrere untergeordnete Steuern zu einer "
-"übergeordetneten Obersteuer  gibt."
+"Die Sequenz dient der Sortierung einzelner Steuerpositionen. Die Sequenz ist "
+"wichtig, wenn mehrere untergeordnete Steuern zu einer Ã¼bergeordneten Steuer "
+"vorliegen."
 
 #. module: account
 #: selection:account.account,type:0
 #: selection:account.account.template,type:0
 #: view:account.journal:0
 msgid "Liquidity"
-msgstr "Finanzmittel"
+msgstr "Liquidität"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form
@@ -6518,7 +6568,7 @@ msgid ""
 "the tool search to analyse information about analytic entries generated in "
 "the system."
 msgstr ""
-"Durch dieses Ansicht können Sie ihre unterschiedlichen analytischen Konten "
+"Durch diese Ansicht können Sie ihre unterschiedlichen analytischen Konten "
 "unter Berücksichtigung Ihres individullen Informationsbedarfs auswerten. "
 "Benutzen Sie dieses Werkzeug für die Auswertung, der von Ihnen gebuchten "
 "Beträge auf Analysekonten."
@@ -6526,7 +6576,7 @@ msgstr ""
 #. module: account
 #: sql_constraint:account.journal:0
 msgid "The name of the journal must be unique per company !"
-msgstr "Die Journalbezeichnung sollte pro Unternehmen eindeutig sein."
+msgstr "Die Journalbezeichnung muss pro Unternehmen eindeutig sein."
 
 #. module: account
 #: field:account.account.template,nocreate:0
@@ -6547,7 +6597,7 @@ msgstr ""
 #: code:addons/account/wizard/account_report_aged_partner_balance.py:58
 #, python-format
 msgid "Enter a Start date !"
-msgstr "Geben Sie ein Startdatum ein !"
+msgstr "Geben Sie ein Startdatum ein!"
 
 #. module: account
 #: report:account.invoice:0
@@ -6555,7 +6605,7 @@ msgstr "Geben Sie ein Startdatum ein !"
 #: selection:account.invoice.report,type:0
 #: selection:report.invoice.created,type:0
 msgid "Supplier Refund"
-msgstr "Lieferanten Gutschrift"
+msgstr "Lieferantengutschrift"
 
 #. module: account
 #: field:account.bank.statement,move_line_ids:0
@@ -6603,7 +6653,7 @@ msgstr "  Bewertung: Saldo"
 #. module: account
 #: field:account.invoice.line,uos_id:0
 msgid "Unit of Measure"
-msgstr "ME"
+msgstr "Mengeneinheit"
 
 #. module: account
 #: constraint:account.payment.term.line:0
@@ -6612,7 +6662,7 @@ msgid ""
 "2% "
 msgstr ""
 "Prozentwert für eine Position der Zahlungsbedingung muss zwischen 0 und 1 "
-"sein, z.B. 0.02 für 2% "
+"sein, z. B. 0.02 für 2% "
 
 #. module: account
 #: field:account.installer,has_default_company:0
@@ -6655,7 +6705,7 @@ msgstr "Steuergrundbetrag"
 #. module: account
 #: field:account.model,name:0
 msgid "Model Name"
-msgstr "Buchungsvorlage Bezeichnung"
+msgstr "Modell-Bezeichnung"
 
 #. module: account
 #: field:account.chart.template,property_account_expense_categ:0
@@ -6698,8 +6748,8 @@ msgid "You can not remove an account containing journal items."
 msgstr "Sie dürfen kein Konto löschen, das Buchungen beinhaltet"
 
 #. module: account
-#: code:addons/account/account_analytic_line.py:145
-#: code:addons/account/account_move_line.py:933
+#: code:addons/account/account_analytic_line.py:143
+#: code:addons/account/account_move_line.py:947
 #, python-format
 msgid "Entries: "
 msgstr "Buchungen: "
@@ -6715,7 +6765,7 @@ msgid "Currency of the related account journal."
 msgstr "Währung des verwendten Buchungsjournals"
 
 #. module: account
-#: code:addons/account/account.py:1563
+#: code:addons/account/account.py:1580
 #, python-format
 msgid "Couldn't create move between different companies"
 msgstr "Konnte keine Ã¼berbetriebliche Buchung erzeugen"
@@ -6731,14 +6781,14 @@ msgid ""
 "account. From this view, you can create and manage the account types you "
 "need for your company."
 msgstr ""
-"Ãœber Kontoarten wird gesteuert mit welcher Logik in den verschiedenen "
+"Ãœber Kontoarten wird gesteuert, mit welcher Logik in den verschiedenen "
 "Journalen gebucht wird. Die Methode für die Abgrenzung beim Jahreswechsel "
 "steuert dabei den Prozess der Buchung beim Jahresabschluss. Die GuV & Bilanz "
 "Positionen steuern den Ausweis für die Auswertungen Bilanz sowie Gewinn und "
 "Verlust. Zum Beispiel könnte eine Kontoart entweder mit einem Konto aus dem "
 "Anlagevermögen, einem Aufwands- oder einem Kreditorenkonto verbunden sein. "
 "Ãœber diese Ansicht können Sie die in Ihrem Unternehmen benötigten Kontoarten "
-"exakt definieren."
+"festlegen."
 
 #. module: account
 #: selection:account.account.type,report_type:0
@@ -6765,16 +6815,16 @@ msgstr "Status ist Entwurf"
 
 #. module: account
 #: view:account.move.line:0
-#: code:addons/account/account_move_line.py:1043
+#: code:addons/account/account_move_line.py:1058
 #, python-format
 msgid "Total debit"
 msgstr "Gesamt Soll"
 
 #. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:824
 #, python-format
 msgid "Entry \"%s\" is not valid !"
-msgstr "Eintrag \"%s\" ist ungültig !"
+msgstr "Eintrag \"%s\" ist ungültig!"
 
 #. module: account
 #: report:account.invoice:0
@@ -6788,7 +6838,7 @@ msgid ""
 "taxes and journals according to the selected template"
 msgstr ""
 "Automatische Konfiguration Ihres Kontenplans, Bankkontos, Steuern und "
-"Journaldefinition resultierend aus der gewählten Vorlage,"
+"Journaldefinition gemäß der gewählten Vorlage,"
 
 #. module: account
 #: help:res.partner,property_account_receivable:0
@@ -6827,12 +6877,12 @@ msgstr ""
 #. module: account
 #: view:account.fiscalyear.close:0
 msgid "Create"
-msgstr "Erstellen"
+msgstr "Anlegen"
 
 #. module: account
 #: model:process.transition.action,name:account.process_transition_action_createentries0
 msgid "Create entry"
-msgstr "Erzeuge Buchung"
+msgstr "Buchung anlegen"
 
 #. module: account
 #: selection:account.account.type,report_type:0
@@ -6845,49 +6895,50 @@ msgstr "Gewinn & Verlust ( Aufwandskonto )"
 #: code:addons/account/account.py:622
 #: code:addons/account/account.py:624
 #: code:addons/account/account.py:963
-#: code:addons/account/account.py:1052
-#: code:addons/account/account.py:1129
-#: code:addons/account/account.py:1344
-#: code:addons/account/account.py:1351
-#: code:addons/account/account.py:2280
-#: code:addons/account/account.py:2596
-#: code:addons/account/account_analytic_line.py:92
-#: code:addons/account/account_analytic_line.py:101
+#: code:addons/account/account.py:1057
+#: code:addons/account/account.py:1136
+#: code:addons/account/account.py:1352
+#: code:addons/account/account.py:1359
+#: code:addons/account/account.py:1361
+#: code:addons/account/account.py:2297
+#: code:addons/account/account.py:2613
+#: code:addons/account/account_analytic_line.py:90
+#: code:addons/account/account_analytic_line.py:99
 #: code:addons/account/account_bank_statement.py:301
 #: code:addons/account/account_bank_statement.py:314
 #: code:addons/account/account_bank_statement.py:352
-#: code:addons/account/account_cash_statement.py:292
-#: code:addons/account/account_cash_statement.py:314
-#: code:addons/account/account_invoice.py:808
-#: code:addons/account/account_invoice.py:839
-#: code:addons/account/account_invoice.py:1030
-#: code:addons/account/account_move_line.py:1200
-#: code:addons/account/account_move_line.py:1216
-#: code:addons/account/account_move_line.py:1218
+#: code:addons/account/account_cash_statement.py:293
+#: code:addons/account/account_cash_statement.py:315
+#: code:addons/account/account_invoice.py:819
+#: code:addons/account/account_invoice.py:850
+#: code:addons/account/account_invoice.py:1042
+#: code:addons/account/account_move_line.py:1215
+#: code:addons/account/account_move_line.py:1231
+#: code:addons/account/account_move_line.py:1233
 #: code:addons/account/wizard/account_invoice_refund.py:108
 #: code:addons/account/wizard/account_invoice_refund.py:110
 #: code:addons/account/wizard/account_open_closed_fiscalyear.py:39
 #: code:addons/account/wizard/account_use_model.py:44
 #, python-format
 msgid "Error !"
-msgstr "Fehler !"
+msgstr "Fehler!"
 
 #. module: account
 #: field:account.financial.report,style_overwrite:0
 msgid "Financial Report Style"
-msgstr "Finanz Report Stiel"
+msgstr "Stil des Finanzberichts"
 
 #. module: account
 #: selection:account.financial.report,sign:0
 msgid "Preserve balance sign"
-msgstr "Erhalte Saldo Vorzeichen"
+msgstr "Erhalte Saldo-Vorzeichen"
 
 #. module: account
 #: view:account.vat.declaration:0
 #: model:ir.actions.report.xml,name:account.account_vat_declaration
 #: model:ir.ui.menu,name:account.menu_account_vat_declaration
 msgid "Taxes Report"
-msgstr "Umsatzsteuer"
+msgstr "Umsatzsteuer-Anmeldung"
 
 #. module: account
 #: selection:account.journal.period,state:0
@@ -6895,16 +6946,16 @@ msgid "Printed"
 msgstr "Gedruckt"
 
 #. module: account
-#: code:addons/account/account_move_line.py:584
-#: code:addons/account/account_move_line.py:591
+#: code:addons/account/account_move_line.py:575
+#: code:addons/account/account_move_line.py:582
 #, python-format
 msgid "Error :"
-msgstr "Fehler :"
+msgstr "Fehler:"
 
 #. module: account
 #: view:account.analytic.line:0
 msgid "Project line"
-msgstr "Budget Projekt"
+msgstr "Projektbudget"
 
 #. module: account
 #: field:account.invoice.tax,manual:0
@@ -6921,11 +6972,11 @@ msgid ""
 "the amounts correspond."
 msgstr ""
 "Damit Ihre Rechnung als bezahlt gekennzeichnet werden kann, müssen Sie einen "
-"Ausgleich durch eine Gegenbuchung herbeiführen, welches Ã¼blicherweise eine "
-"Zahlung ist. Durch die Funktion des automatisierten Ausgleichs offener "
-"Posten, nutzen Sie die OpenERP Automatik für die Suche und den Ausgleich von "
-"zusammengehörigen Rechnungen und Zahlungen Ã¼ber eine Prüfung "
-"zuammenpassender Beträge."
+"Ausgleich durch eine Gegenbuchung herbeiführen. Ãœblicherweise ist dies eine "
+"Zahlung. Durch die Funktion des automatisierten Ausgleichs offener Posten, "
+"nutzen Sie die Automatik von OpenERP den Ausgleich von zusammengehörigen "
+"Rechnungen und Zahlungen Ã¼ber eine Suche zuammenpassender Beträge "
+"durchzuführen."
 
 #. module: account
 #: view:account.move:0
@@ -6941,9 +6992,9 @@ msgid ""
 "row to display the amount of debit/credit/balance that precedes the filter "
 "you've set."
 msgstr ""
-"Wenn ein Tages oder Periodenfilter gewählt wird, können sie mit diesem "
-"Kennzeichen steuern, ob eine Zeile mit Soll/Haben/Saldo ausgegeben wird, die "
-"die Buchungen davor summiert."
+"Wenn ein Filter nach Datum oder Periode gewählt wird, können sie mit diesem "
+"Kennzeichen steuern, ob eine Zeile mit Soll/Haben/Saldo der Ausgabe "
+"vorangestellt wird."
 
 #. module: account
 #: view:account.bank.statement:0
@@ -6952,7 +7003,7 @@ msgstr ""
 #: model:ir.ui.menu,name:account.menu_action_move_journal_line_form
 #: model:ir.ui.menu,name:account.menu_finance_entries
 msgid "Journal Entries"
-msgstr "Buchungsbelege"
+msgstr "Buchungen"
 
 #. module: account
 #: help:account.partner.ledger,page_split:0
@@ -6960,7 +7011,7 @@ msgid "Display Ledger Report with One partner per page"
 msgstr "Kontoauszug mit einem Partner pro Seite"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1218
+#: code:addons/account/account_move_line.py:1233
 #, python-format
 msgid ""
 "You can not do this modification on a reconciled entry! You can just change "
@@ -6987,9 +7038,9 @@ msgid ""
 "This report is an analysis done by a partner. It is a PDF report containing "
 "one line per partner representing the cumulative credit balance"
 msgstr ""
-"Diese Auswertung analysiert die Salden auf Partnerskonten. Der Bericht "
-"beinhaltet eine PDF Auswertung mit je einer zusammenfassenden "
-"Auswertungszeile je Partner"
+"Diese Auswertung analysiert die Salden auf Partnerskonten. Der PDF-Bericht "
+"beinhaltet eine Auswertung mit je einer zusammenfassenden Auswertungszeile "
+"je Partner"
 
 #. module: account
 #: code:addons/account/wizard/account_validate_account_move.py:61
@@ -7027,7 +7078,7 @@ msgid ""
 "Error: The default UOM and the purchase UOM must be in the same category."
 msgstr ""
 "Fehler: Die Standard Mengeneinheit (ME) sowie die Mengeneinheit (ME) bei der "
-"Beschaffung muss in derselben Kategorie sein."
+"Beschaffung müssen derselben Kategorie angehören."
 
 #. module: account
 #: view:account.journal.select:0
@@ -7045,12 +7096,12 @@ msgstr "Anfangssaldo"
 #. module: account
 #: model:ir.model,name:account.model_account_move_reconcile
 msgid "Account Reconciliation"
-msgstr "Konto OP Ausgleich"
+msgstr "Konto OP-Ausgleich"
 
 #. module: account
 #: model:ir.model,name:account.model_account_fiscal_position_tax
 msgid "Taxes Fiscal Position"
-msgstr "Steuern Zuordnung"
+msgstr "Steuerzuordnung"
 
 #. module: account
 #: report:account.general.ledger:0
@@ -7066,7 +7117,7 @@ msgstr "Umsätze nach Konten und Perioden"
 #. module: account
 #: model:process.transition,note:account.process_transition_paymentorderbank0
 msgid "The payment order is sent to the bank."
-msgstr "Der Zahlungsauftrag wurde an Bank versendet."
+msgstr "Die Zahlungsanweisung wurde der Bank zugesendet."
 
 #. module: account
 #: view:account.balance.report:0
@@ -7127,7 +7178,7 @@ msgid "Total:"
 msgstr "Summe:"
 
 #. module: account
-#: code:addons/account/account.py:2229
+#: code:addons/account/account.py:2246
 #, python-format
 msgid ""
 "You can specify year, month and date in the name of the model using the "
@@ -7142,11 +7193,11 @@ msgstr ""
 "Sie können Jahr, Monat und Datum für die Anwendung dieser Buchungsvorlage "
 "als Buchungstext  durch folgende Platzhalter definieren:\n"
 "\n"
-"%(year)s: Spezifikation für das Jahr \n"
-"%(month)s: Spezifikation für den Monat \n"
-"%(date)s: Spezifikation für das Datum\n"
+"%(year)s: Festlegung des Jahres \n"
+"%(month)s: Festlegung des Monats \n"
+"%(date)s: Festlegung des heutigen Datums\n"
 "\n"
-"z.B.  Meine Buchungsvorlage am %(date)s"
+"z. B.  Meine Buchungsvorlage am %(date)s"
 
 #. module: account
 #: help:report.invoice.created,origin:0
@@ -7157,7 +7208,7 @@ msgstr "Belegreferenz für diese Rechnung"
 #: field:account.tax.code,child_ids:0
 #: field:account.tax.code.template,child_ids:0
 msgid "Child Codes"
-msgstr "untergeordnete Codes"
+msgstr "untergeordnete Schlüssel"
 
 #. module: account
 #: view:account.tax.template:0
@@ -7165,7 +7216,7 @@ msgid "Taxes used in Sales"
 msgstr "Steuern für Verkäufe"
 
 #. module: account
-#: code:addons/account/account_invoice.py:495
+#: code:addons/account/account_invoice.py:504
 #: code:addons/account/wizard/account_invoice_refund.py:145
 #, python-format
 msgid "Data Insufficient !"
@@ -7210,15 +7261,16 @@ msgid ""
 "automatically based on these data."
 msgstr ""
 "Konfigurieren Sie ie Bankkonten des Unternehmens und wählen Sie diejenigen, "
-"die in den Report Fußzeilen erscheinen sollen.\r\n"
+"die in Fußzeilen des Berichts erscheinen sollen.\r\n"
 "Sie können die Bankkonten in der Liste sortieren. Wenn Sie die Buchhaltung "
-"von OpenERP einsetzen werden automatisch Journale und Konten generiert."
+"von OpenERP einsetzen werden aus diesen Angaben automatisch Journale und "
+"Konten generiert."
 
 #. module: account
 #: model:process.transition,note:account.process_transition_invoicemanually0
 msgid "A statement with manual entries becomes a draft statement."
 msgstr ""
-"Ein Bankauszug mit händischen Buchungen erhält zunächst den Status Entwurf."
+"Ein Bankauszug mit händischen Buchungen erhält zunächst den Status 'Entwurf'."
 
 #. module: account
 #: view:account.aged.trial.balance:0
@@ -7234,21 +7286,21 @@ msgstr ""
 "Ihrer Debitoren aufgeteilt in zeitliche Intervalle. Wenn Sie diesen Bericht "
 "öffnen, fragt OpenERP nach dem Unternehmen, der Periode und dem "
 "Zeitintervall für die Auswertung (in Tagen). OpenERP berechnet dann eine "
-"Tabelle mit Kundensalden nach Perioden. Wenn Sie eine Intervalle von 30 "
-"Tagen eingeben, erzeugt OpenERP eine Auswertung der Salden für den letzten "
-"Monat, vorletzten Monat usw. "
+"Tabelle mit Kundensalden nach Perioden. Wenn Sie ein Intervalle von 30 Tagen "
+"eingeben, erzeugt OpenERP eine Auswertung der Salden für den letzten Monat, "
+"vorletzten Monat usw. "
 
 #. module: account
 #: field:account.invoice,origin:0
 #: field:report.invoice.created,origin:0
 msgid "Source Document"
-msgstr "Herkunftsverweis"
+msgstr "Herkunftsdokument"
 
 #. module: account
-#: code:addons/account/account.py:1432
+#: code:addons/account/account.py:1449
 #, python-format
 msgid "You can not delete a posted journal entry \"%s\"!"
-msgstr "Sie können keine verbuchten Buchungen löschen \"%s\"!"
+msgstr "Sie können keine quittierten Buchungen löschen \"%s\"!"
 
 #. module: account
 #: selection:account.partner.ledger,filter:0
@@ -7266,7 +7318,7 @@ msgstr "Bankauszug Abstimmung"
 #. module: account
 #: model:ir.model,name:account.model_accounting_report
 msgid "Accounting Report"
-msgstr "Report Finanzen"
+msgstr "Finanzbericht"
 
 #. module: account
 #: report:account.invoice:0
@@ -7277,8 +7329,8 @@ msgstr "Steuern:"
 #: help:account.tax,amount:0
 msgid "For taxes of type percentage, enter % ratio between 0-1."
 msgstr ""
-"Für Steuern mit dem Typ Prozent, geben Sie einen Wert zwischen 0 - 1 ein, "
-"z.B. 0.19 für 19%"
+"Für Steuern mit dem Typ Prozent, geben Sie einen Wert zwischen 0 - 1 ein, z. "
+"B.  0.19 für 19%"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_subscription_form
@@ -7289,7 +7341,7 @@ msgid ""
 "you can create such entries to automate the postings in the system."
 msgstr ""
 "Eine wiederkehrende Buchung ist ein Geschäftsvorfall, der in regelmässigen "
-"wiederkehrenden Zeitabständen zu buchen ist, z.B. die Buchungen aus "
+"wiederkehrenden Zeitabständen zu buchen ist, z. B. die Buchungen aus "
 "bestimmten Verträgen mit Kunden oder Lieferanten, Mietaufwendungen oder "
 "Erträge aus Abonnements. Durch die Definition wiederkehrender Buchungen "
 "können Sie dafür sorgen, dass diese Geschäftsvorfälle automatisch gebucht "
@@ -7298,7 +7350,7 @@ msgstr ""
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_report_tree_hierarchy
 msgid "Financial Reports Hierarchy"
-msgstr "Hierarchische Finanz Reports"
+msgstr "Hierarchie der Finanzberichte"
 
 #. module: account
 #: field:account.entries.report,product_uom_id:0
@@ -7329,8 +7381,8 @@ msgid ""
 "This date will be used as the invoice date for Refund Invoice and Period "
 "will be chosen accordingly!"
 msgstr ""
-"Dieses Datum wird genutzt als Rechnungsdatum für eine Gutschrift. Die "
-"Buchungsperiode wird dabei gleichlautend eingetragen."
+"Dieses Datum wird als Belegdatum für eine Gutschrift. Die Buchungsperiode "
+"wird dabei passend gewählt."
 
 #. module: account
 #: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation
@@ -7352,7 +7404,7 @@ msgstr "Positionen"
 #. module: account
 #: view:account.tax.template:0
 msgid "Account Tax Template"
-msgstr "Umsatzsteuer Vorlage"
+msgstr "Umsatzsteuer-Vorlage"
 
 #. module: account
 #: view:account.journal.select:0
@@ -7365,8 +7417,8 @@ msgid "Are you sure you want to open this invoice ?"
 msgstr "Sind Sie sicher, daß Sie diese Rechnung Ã¶ffnen wollen?"
 
 #. module: account
-#: code:addons/account/account_invoice.py:528
-#: code:addons/account/account_invoice.py:543
+#: code:addons/account/account_invoice.py:537
+#: code:addons/account/account_invoice.py:552
 #, python-format
 msgid ""
 "Can not find a chart of account, you should create one from the "
@@ -7378,10 +7430,10 @@ msgstr ""
 #. module: account
 #: field:account.chart.template,property_account_expense_opening:0
 msgid "Opening Entries Expense Account"
-msgstr "Eröffnungsbilanz Buchungen Aufwandskonto"
+msgstr "Eröffnungsbuchungen des Aufwandskontos"
 
 #. module: account
-#: code:addons/account/account_move_line.py:999
+#: code:addons/account/account_move_line.py:1014
 #, python-format
 msgid "Accounting Entries"
 msgstr "Buchungen"
@@ -7389,7 +7441,7 @@ msgstr "Buchungen"
 #. module: account
 #: field:account.account.template,parent_id:0
 msgid "Parent Account Template"
-msgstr "Basiskonto Vorlage"
+msgstr "Stammkonto Vorlage"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_configuration_installer
@@ -7421,7 +7473,7 @@ msgstr ""
 #. module: account
 #: view:account.entries.report:0
 msgid "Posted entries"
-msgstr "Verbuchte Buchungen"
+msgstr "Quittierte Buchungen"
 
 #. module: account
 #: help:account.payment.term.line,value_amount:0
@@ -7444,7 +7496,7 @@ msgstr "Gruppiere nach Rechnungsjahr"
 #. module: account
 #: help:res.partner,credit:0
 msgid "Total amount this customer owes you."
-msgstr "Gesamtschulden eines Kunden"
+msgstr "Gesamtschulden dieses Kunden"
 
 #. module: account
 #: model:ir.model,name:account.model_ir_sequence
@@ -7465,7 +7517,7 @@ msgstr "OK"
 #. module: account
 #: field:account.chart.template,tax_code_root_id:0
 msgid "Root Tax Code"
-msgstr "Basis Steuerkonto"
+msgstr "Basis Steuerschlüssel"
 
 #. module: account
 #: help:account.journal,centralisation:0
@@ -7485,17 +7537,17 @@ msgstr "Beendet am"
 #. module: account
 #: model:ir.model,name:account.model_account_bank_statement_line
 msgid "Bank Statement Line"
-msgstr "Bankauszug Buchungen"
+msgstr "Positionen auf Bankauszug"
 
 #. module: account
 #: field:account.automatic.reconcile,date2:0
 msgid "Ending Date"
-msgstr "Ende Datum"
+msgstr "Enddatum"
 
 #. module: account
 #: field:wizard.multi.charts.accounts,purchase_tax:0
 msgid "Default Purchase Tax"
-msgstr "Standard Steuer Einkauf"
+msgstr "Standard Erwerbssteuer"
 
 #. module: account
 #: field:account.chart.template,property_account_income_opening:0
@@ -7518,26 +7570,26 @@ msgstr ""
 "Steuerberechnung gebraucht wird."
 
 #. module: account
-#: code:addons/account/account.py:1088
+#: code:addons/account/account.py:1095
 #, python-format
 msgid "You should have chosen periods that belongs to the same company"
 msgstr ""
-"Sie sollten Perioden wählen, die für dieses Unternehmen vorhanden sind"
+"Sie sollten Perioden wählen, die dem gleichen Unternehmen zugeordnet sind"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_review_payment_terms_installer
 msgid "Review your Payment Terms"
-msgstr "Ãœberprüfen Sie Ihre Zahlungskonditionen"
+msgstr "Ãœberprüfen Sie Ihre Zahlungsbedingungen"
 
 #. module: account
 #: field:account.fiscalyear.close,report_name:0
 msgid "Name of new entries"
-msgstr "Buchungstext"
+msgstr "Text neuer Buchungen"
 
 #. module: account
 #: view:account.use.model:0
 msgid "Create Entries"
-msgstr "Erstelle Buchungen"
+msgstr "Buchungen anlegen"
 
 #. module: account
 #: view:res.partner:0
@@ -7550,8 +7602,8 @@ msgid "Reporting"
 msgstr "Berichtswesen"
 
 #. module: account
-#: code:addons/account/account_move_line.py:759
-#: code:addons/account/account_move_line.py:842
+#: code:addons/account/account_move_line.py:775
+#: code:addons/account/account_move_line.py:856
 #: code:addons/account/wizard/account_invoice_state.py:44
 #: code:addons/account/wizard/account_invoice_state.py:68
 #: code:addons/account/wizard/account_state_open.py:37
@@ -7575,13 +7627,13 @@ msgstr "Kassenabschluss"
 #: view:account.journal:0
 #: field:res.partner.bank,journal_id:0
 msgid "Account Journal"
-msgstr "Journal Konto"
+msgstr "Konto-Journal"
 
 #. module: account
 #: model:process.node,name:account.process_node_paidinvoice0
 #: model:process.node,name:account.process_node_supplierpaidinvoice0
 msgid "Paid invoice"
-msgstr "Rechnung Bezahlt"
+msgstr "Beglichene Rechnung"
 
 #. module: account
 #: help:account.partner.reconcile.process,next_partner_id:0
@@ -7590,9 +7642,9 @@ msgid ""
 "the system to go through the reconciliation process, based on the latest day "
 "it have been reconciled."
 msgstr ""
-"Dieses Feld zeigt den nächsten Partner an, der automatisch durch das System "
-"im Rahmen des Ausgleichs offener Posten auf Basis des letztmaligen "
-"Ausgleichs von offenen Posten vorgeschlagen wird."
+"Dieses Feld zeigt automatisch den nächsten Partner an, der im Rahmen des "
+"Ausgleichs offener Posten, auf Basis des letztmaligen Ausgleichs von offenen "
+"Posten, vorgeschlagen wird."
 
 #. module: account
 #: field:account.move.line.reconcile.writeoff,comment:0
@@ -7608,13 +7660,13 @@ msgstr "Domain"
 #. module: account
 #: model:ir.model,name:account.model_account_use_model
 msgid "Use model"
-msgstr "Benutze Buchungsvorlage"
+msgstr "Benutze Modellvorlage"
 
 #. module: account
 #: code:addons/account/account.py:429
 #, python-format
 msgid "Unable to adapt the initial balance (negative value)!"
-msgstr "Kann die Anfangsbilanz nicht berechnen (negativer Wert)"
+msgstr "Kann die Anfangsbilanz nicht berechnen (negativer Wert)!"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_moves_purchase
@@ -7645,21 +7697,23 @@ msgstr "Kunden und Lieferanten Gutschriften"
 #. module: account
 #: field:account.financial.report,sign:0
 msgid "Sign on Reports"
-msgstr "Sign On Reports"
+msgstr "Vorzeichen in Berichten"
 
 #. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:73
+#: code:addons/account/wizard/account_fiscalyear_close.py:88
 #, python-format
 msgid "The periods to generate opening entries were not found"
-msgstr "Die Perioden für die Eröffnungsbilanz konnte nicht gefunden werden."
+msgstr ""
+"Die Perioden zur Erstellung der Eröffnungsbilanz konntennicht gefunden "
+"werden."
 
 #. module: account
 #: model:account.account.type,name:account.data_account_type_view
 msgid "Root/View"
-msgstr "Wurzel/Sicht"
+msgstr "Stamm/Sicht"
 
 #. module: account
-#: code:addons/account/account.py:3121
+#: code:addons/account/account.py:3138
 #, python-format
 msgid "OPEJ"
 msgstr "EB"
@@ -7668,7 +7722,7 @@ msgstr "EB"
 #: report:account.invoice:0
 #: view:account.invoice:0
 msgid "PRO-FORMA"
-msgstr "PRO-FORMA"
+msgstr "PROFORMA"
 
 #. module: account
 #: selection:account.entries.report,move_line_state:0
@@ -7694,13 +7748,14 @@ msgid "Optional Information"
 msgstr "Informationen (Optional)"
 
 #. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:84
+#: code:addons/account/wizard/account_fiscalyear_close.py:100
 #, python-format
 msgid "The journal must have default credit and debit account"
 msgstr "Das Journal benötigt einen Standardwert für Debitor und Kreditor"
 
 #. module: account
 #: report:account.general.journal:0
+#: xsl:account.transfer:0
 msgid ":"
 msgstr ":"
 
@@ -7727,25 +7782,25 @@ msgstr "Multi-Währung"
 #. module: account
 #: field:account.model.line,date_maturity:0
 msgid "Maturity Date"
-msgstr "Datum Fällig"
+msgstr "Fälligkeitsdatum"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1302
+#: code:addons/account/account_move_line.py:1317
 #, python-format
 msgid "Bad account !"
 msgstr "Falsches Konto!"
 
 #. module: account
-#: code:addons/account/account.py:3108
+#: code:addons/account/account.py:3125
 #, python-format
 msgid "Sales Journal"
-msgstr "Journal Verkauf"
+msgstr "Verkaufs-Journal"
 
 #. module: account
 #: code:addons/account/wizard/account_move_journal.py:104
 #, python-format
 msgid "Open Journal Items !"
-msgstr "Öffne Journalbuchungen"
+msgstr "Öffne Journalbuchungen!"
 
 #. module: account
 #: model:ir.model,name:account.model_account_invoice_tax
@@ -7753,7 +7808,7 @@ msgid "Invoice Tax"
 msgstr "Umsatzsteuer"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1277
+#: code:addons/account/account_move_line.py:1292
 #, python-format
 msgid "No piece number !"
 msgstr "Keine Stückzahl!"
@@ -7762,7 +7817,7 @@ msgstr "Keine Stückzahl!"
 #: view:account.financial.report:0
 #: model:ir.ui.menu,name:account.menu_account_report_tree_hierarchy
 msgid "Account Reports Hierarchy"
-msgstr "Konten Report Hierarchie"
+msgstr "Bericht der Konten-Hierarchie"
 
 #. module: account
 #: help:account.account.template,chart_template_id:0
@@ -7774,22 +7829,21 @@ msgid ""
 "common to both several times)."
 msgstr ""
 "Dieses wahlfreie Feld ermöglicht Ihnen eine Konten-Vorlage von einer "
-"Kontenplan-Vorlage abzuleiten, wobei sich die Konten des vom Stamm-"
-"Kontenplan unterscheiden können. So können Sie eine Kontenplan-Vorlage "
-"festlegen, die eine Andere, ggf. auch nur geringfügig, erweitert. (Sie "
-"brauchen also nicht die beiden gemeinsamen Strukturen mehrfach zu "
-"definieren)."
+"Kontenplan-Vorlage abzuleiten, wobei sich die Konten vom Stamm-Kontenplan "
+"unterscheiden können. So können Sie eine Kontenplan-Vorlage festlegen, die "
+"eine Andere, ggf. auch nur geringfügig, erweitert. (Sie brauchen also nicht "
+"die beiden gemeinsamen Strukturen mehrfach zu definieren)."
 
 #. module: account
 #: view:account.move:0
 msgid "Unposted Journal Entries"
-msgstr "Nicht verbuchte Buchungen"
+msgstr "Nicht Quittierte Buchungen"
 
 #. module: account
 #: view:product.product:0
 #: view:product.template:0
 msgid "Sales Properties"
-msgstr "Verkauf Eigenschaften"
+msgstr "Verkaufseinstellungen"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_manual_reconcile
@@ -7799,7 +7853,7 @@ msgstr "Manueller Kontenausgleich"
 #. module: account
 #: report:account.overdue:0
 msgid "Total amount due:"
-msgstr "Gesamtbetrag fällig:"
+msgstr "Fälliger Gesamtbetrag:"
 
 #. module: account
 #: field:account.analytic.chart,to_date:0
@@ -7809,7 +7863,7 @@ msgstr "An"
 
 #. module: account
 #: selection:account.move.line,centralisation:0
-#: code:addons/account/account.py:1518
+#: code:addons/account/account.py:1535
 #, python-format
 msgid "Currency Adjustment"
 msgstr "Währungsanpassung"
@@ -7863,18 +7917,20 @@ msgstr "Mai"
 #: selection:account.common.partner.report,result_selection:0
 #: selection:account.partner.balance,result_selection:0
 #: selection:account.partner.ledger,result_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:374
 #: code:addons/account/report/account_partner_balance.py:299
+#: code:addons/account/report/account_partner_ledger.py:396
 #, python-format
 msgid "Payable Accounts"
 msgstr "Kreditorenkonten"
 
 #. module: account
-#: code:addons/account/account_invoice.py:732
+#: code:addons/account/account_invoice.py:741
 #, python-format
 msgid "Global taxes defined, but they are not in invoice lines !"
 msgstr ""
-"Allgemeine Steuern wurden definiert, aber befinden sich nicht auf "
-"Rechnungszeilenebene!"
+"Allgemeine Steuern wurden definiert, aber in den Rechnungspositionensind "
+"keine aufgeführt!"
 
 #. module: account
 #: model:ir.model,name:account.model_account_chart_template
@@ -7897,17 +7953,17 @@ msgstr "Steuercode Nummer"
 #. module: account
 #: view:validate.account.move:0
 msgid "Post Journal Entries of a Journal"
-msgstr "Erzeuge Buchungen in Journal"
+msgstr "Buchungen eines Journals quittieren"
 
 #. module: account
 #: view:product.product:0
 msgid "Sale Taxes"
-msgstr "Steuern Verkauf"
+msgstr "Verkaufssteuern"
 
 #. module: account
 #: field:account.financial.report,name:0
 msgid "Report Name"
-msgstr "Report Bezeichnung"
+msgstr "Berichtsbezeichnung"
 
 #. module: account
 #: model:account.account.type,name:account.data_account_type_cash
@@ -7915,38 +7971,38 @@ msgstr "Report Bezeichnung"
 #: selection:account.bank.accounts.wizard,account_type:0
 #: selection:account.entries.report,type:0
 #: selection:account.journal,type:0
-#: code:addons/account/account.py:3003
+#: code:addons/account/account.py:3020
 #, python-format
 msgid "Cash"
-msgstr "Kasse"
+msgstr "Barkasse"
 
 #. module: account
 #: field:account.fiscal.position.account,account_dest_id:0
 #: field:account.fiscal.position.account.template,account_dest_id:0
 msgid "Account Destination"
-msgstr "Konto Zuordnung"
-
-#. module: account
-#: code:addons/account/account.py:1431
-#: code:addons/account/account.py:1460
-#: code:addons/account/account.py:1467
-#: code:addons/account/account_invoice.py:920
-#: code:addons/account/account_move_line.py:1104
-#: code:addons/account/wizard/account_automatic_reconcile.py:152
-#: code:addons/account/wizard/account_fiscalyear_close.py:73
-#: code:addons/account/wizard/account_fiscalyear_close.py:83
-#: code:addons/account/wizard/account_fiscalyear_close.py:86
+msgstr "Kontozuordnung"
+
+#. module: account
+#: code:addons/account/account.py:1448
+#: code:addons/account/account.py:1477
+#: code:addons/account/account.py:1484
+#: code:addons/account/account_invoice.py:931
+#: code:addons/account/account_move_line.py:1119
+#: code:addons/account/wizard/account_automatic_reconcile.py:148
+#: code:addons/account/wizard/account_fiscalyear_close.py:88
+#: code:addons/account/wizard/account_fiscalyear_close.py:99
+#: code:addons/account/wizard/account_fiscalyear_close.py:102
 #: code:addons/account/wizard/account_move_journal.py:165
 #: code:addons/account/wizard/account_report_aged_partner_balance.py:56
 #: code:addons/account/wizard/account_report_aged_partner_balance.py:58
 #, python-format
 msgid "UserError"
-msgstr "BenutzerFehler"
+msgstr "UserError"
 
 #. module: account
 #: model:process.node,note:account.process_node_supplierpaymentorder0
 msgid "Payment of invoices"
-msgstr "Zahlung von Eingangsrechnungen"
+msgstr "Ausgleich von Eingangsrechnungen"
 
 #. module: account
 #: field:account.bank.statement.line,sequence:0
@@ -7976,7 +8032,7 @@ msgstr "Optionale Menge in Buchungen"
 #. module: account
 #: view:account.financial.report:0
 msgid "Parent Report"
-msgstr "Ãœbergeordneter Report"
+msgstr "Ãœbergeordneter Bericht"
 
 #. module: account
 #: view:account.state.open:0
@@ -7991,7 +8047,7 @@ msgstr "Verkauf nach Kontotyp"
 #. module: account
 #: help:account.invoice,move_id:0
 msgid "Link to the automatically generated Journal Items."
-msgstr "Verlinke mit automatisch generierten Buchungen"
+msgstr "Verweis auf automatisch generierte Buchungen"
 
 #. module: account
 #: selection:account.installer,period:0
@@ -8047,12 +8103,12 @@ msgstr ""
 #. module: account
 #: model:ir.ui.menu,name:account.menu_finance_legal_statement
 msgid "Legal Reports"
-msgstr "Offizielle Auswertungen"
+msgstr "Offizielle Finanzberichte"
 
 #. module: account
 #: field:account.tax.code,sum_period:0
 msgid "Period Sum"
-msgstr "Summe Periode"
+msgstr "Periodensumme"
 
 #. module: account
 #: help:account.tax,sequence:0
@@ -8061,15 +8117,15 @@ msgid ""
 "to the higher ones. The order is important if you have a tax with several "
 "tax children. In this case, the evaluation order is important."
 msgstr ""
-"Des Feld \"Reihenfolge\" wird benutzt, um die Steuerzeilen aufsteigend zu "
-"sortieren. Die Reihenfolge ist dann von Bedeutung, wenn es eine Steuerart "
-"mit mehreren Steuersätzen gibt. In diesem Fall ist die Reihenfolge für die "
-"Auswahl entscheidend."
+"Des Feld \"Reihenfolge\" (Sequenz) wird benutzt, um die Steuerzeilen "
+"aufsteigend zu sortieren. Die Reihenfolge ist dann von Bedeutung, wenn es "
+"eine Steuerart mit mehreren Steuersätzen gibt. In diesem Fall ist die "
+"Reihenfolge für die Auswahl entscheidend."
 
 #. module: account
 #: model:ir.model,name:account.model_account_cashbox_line
 msgid "CashBox Line"
-msgstr "Barkasse Buchungen"
+msgstr "Barkassenbuchung"
 
 #. module: account
 #: view:account.partner.ledger:0
@@ -8084,7 +8140,7 @@ msgstr "Partner Kontoauszug"
 #. module: account
 #: selection:account.tax.template,type:0
 msgid "Fixed"
-msgstr "Fest"
+msgstr "Fix"
 
 #. module: account
 #: code:addons/account/account.py:629
@@ -8092,32 +8148,33 @@ msgstr "Fest"
 #: code:addons/account/account.py:645
 #: code:addons/account/account.py:664
 #: code:addons/account/account.py:787
-#: code:addons/account/account.py:1077
-#: code:addons/account/account_invoice.py:732
-#: code:addons/account/account_invoice.py:735
-#: code:addons/account/account_invoice.py:738
+#: code:addons/account/account.py:1082
+#: code:addons/account/account_invoice.py:741
+#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account_invoice.py:747
 #: code:addons/account/account_move_line.py:97
-#: code:addons/account/account_move_line.py:750
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:766
+#: code:addons/account/account_move_line.py:819
+#: code:addons/account/wizard/account_fiscalyear_close.py:62
 #, python-format
 msgid "Warning !"
-msgstr "Warnung"
+msgstr "Warnung!"
 
 #. module: account
 #: field:account.entries.report,move_line_state:0
 msgid "State of Move Line"
-msgstr "Status Buchungszeile"
+msgstr "Status der Buchung"
 
 #. module: account
 #: model:ir.model,name:account.model_account_move_line_reconcile
 msgid "Account move line reconcile"
-msgstr "Storno Buchung"
+msgstr "Ausgleich der Buchung"
 
 #. module: account
 #: view:account.subscription.generate:0
 #: model:ir.model,name:account.model_account_subscription_generate
 msgid "Subscription Compute"
-msgstr "Wiederkehrende Buchungen"
+msgstr "Wiederkehrende Buchungen berechnen"
 
 #. module: account
 #: field:account.bank.statement.line,partner_id:0
@@ -8150,7 +8207,7 @@ msgid "Select a currency to apply on the invoice"
 msgstr "Wähle eine Währung für diese Rechnung"
 
 #. module: account
-#: code:addons/account/account.py:3446
+#: code:addons/account/account.py:3463
 #, python-format
 msgid ""
 "The bank account defined on the selected chart of accounts hasn't a code."
@@ -8160,18 +8217,18 @@ msgstr "Das Bankkonto in der ausgewählten Vorlage hat keinen Code"
 #: code:addons/account/wizard/account_invoice_refund.py:108
 #, python-format
 msgid "Can not %s draft/proforma/cancel invoice."
-msgstr "Kann Entwurf/ProForma/Storno für Rechnung %s nicht durchführen"
+msgstr "Kann Entwurf/Proforma/Storno für Rechnung %s nicht durchführen"
 
 #. module: account
-#: code:addons/account/account_invoice.py:810
+#: code:addons/account/account_invoice.py:821
 #, python-format
 msgid "No Invoice Lines !"
-msgstr "Keine Rechnungszeilen !"
+msgstr "Keine Rechnungspositionen!"
 
 #. module: account
 #: view:account.financial.report:0
 msgid "Report Type"
-msgstr "Report Type"
+msgstr "Berichtsart"
 
 #. module: account
 #: view:account.analytic.account:0
@@ -8200,8 +8257,8 @@ msgid ""
 "Select Fiscal Year which you want to remove entries for its End of year "
 "entries journal"
 msgstr ""
-"Wähle das abzuschliessende Geschäftsjahr für die Buchung in das definierte "
-"Journal für den Jahresabschluss"
+"Wähle das Geschäftsjahr aus dessen Jahres-Abschlussbericht und dessen "
+"Abschluss-Salden entfernt werden sollen"
 
 #. module: account
 #: field:account.tax.template,type_tax_use:0
@@ -8248,10 +8305,10 @@ msgid "Deferral Method"
 msgstr "Abgrenzung Jahreswechsel"
 
 #. module: account
-#: code:addons/account/account_invoice.py:379
+#: code:addons/account/account_invoice.py:388
 #, python-format
 msgid "Invoice '%s' is paid."
-msgstr "Rechnung '%s' wurde bezahlt."
+msgstr "Rechnung '%s' wurde beglichen."
 
 #. module: account
 #: model:process.node,note:account.process_node_electronicfile0
@@ -8261,7 +8318,7 @@ msgstr "Automatische Buchung"
 #. module: account
 #: constraint:account.tax.code.template:0
 msgid "Error ! You can not create recursive Tax Codes."
-msgstr "Fehler! Sie können keine rekursiven Umsatzsteuern definieren"
+msgstr "Fehler! Sie können keine rekursiven Steuern definieren"
 
 #. module: account
 #: help:account.journal,group_invoice_lines:0
@@ -8313,7 +8370,7 @@ msgid "Associated Partner"
 msgstr "Zugehöriger Partner"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1332
+#: code:addons/account/account_invoice.py:1345
 #, python-format
 msgid "You must first select a partner !"
 msgstr "Sie müssen zuerst einen Partner wählen!"
@@ -8370,13 +8427,13 @@ msgstr ""
 "zugeordneten Steuerschlüsseln für die Umsatzsteuererklärung in Ihrem Land."
 
 #. module: account
-#: code:addons/account/account_invoice.py:428
+#: code:addons/account/account_invoice.py:437
 #, python-format
 msgid ""
 "Can not find a chart of accounts for this company, you should create one."
 msgstr ""
 "Kann keinen Kontenplan für dieses Unternehmen finden. Sie müssen einen "
-"anlagen!"
+"anlegen!"
 
 #. module: account
 #: view:account.invoice:0
@@ -8394,16 +8451,16 @@ msgid "Choose Fiscal Year"
 msgstr "Wähle Geschäftsjahr"
 
 #. module: account
-#: code:addons/account/account.py:3111
+#: code:addons/account/account.py:3128
 #, python-format
 msgid "Purchase Refund Journal"
-msgstr "Journal Gutschriften Eingangsrechnungen"
+msgstr "Journal zu Gutschriften aus Eingangsrechnungen"
 
 #. module: account
 #: help:account.tax.template,amount:0
 msgid "For Tax Type percent enter % ratio between 0-1."
 msgstr ""
-"Für den Typ Prozent erfassen Sie einen Wert zwischen 0 und 1, z.B. 0.19 für "
+"Für den Typ Prozent erfassen Sie einen Wert zwischen 0 und 1, z. B. 0.19 für "
 "19%"
 
 #. module: account
@@ -8414,7 +8471,7 @@ msgstr "aktuelle Konten"
 #. module: account
 #: view:account.invoice.report:0
 msgid "Group by Invoice Date"
-msgstr "Gruppiert je Rechnungsdatum"
+msgstr "Gruppiert nach Rechnungsdatum"
 
 #. module: account
 #: view:account.invoice.refund:0
@@ -8456,8 +8513,8 @@ msgid ""
 "Total amount (in Company currency) for transactions held in secondary "
 "currency for this account."
 msgstr ""
-"Gesamtbetrag in Unternehmenswährung für  Buchungen in der 2.Währung des "
-"Kontos"
+"Gesamtbetrag in Unternehmenswährung für Buchungen in der Alternativwährung "
+"des Kontos"
 
 #. module: account
 #: report:account.invoice:0
@@ -8488,13 +8545,13 @@ msgid "Compute Code for Taxes Included Prices"
 msgstr "Berechnungsgrundlage (inkl. Steuer)"
 
 #. module: account
-#: code:addons/account/account_invoice.py:1030
+#: code:addons/account/account_invoice.py:1042
 #, python-format
 msgid ""
 "You can not cancel an invoice which is partially paid! You need to "
 "unreconcile related payment entries first!"
 msgstr ""
-"Sie können eine teilbezahlte Rechnungen nicht stornieren! Sie müssen der OP-"
+"Sie können eine angezahlte Rechnungen nicht stornieren! Sie müssen der OP-"
 "Ausgleich der Zahlung zuerst rückgängig machen."
 
 #. module: account
@@ -8511,17 +8568,17 @@ msgstr "korrigierter Saldo"
 #: model:ir.actions.act_window,name:account.action_account_fiscal_position_template_form
 #: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form_template
 msgid "Fiscal Position Templates"
-msgstr "Steuerzuordnung Vorlage"
+msgstr "Vorlage zum Finanzbericht"
 
 #. module: account
 #: view:account.entries.report:0
 msgid "Int.Type"
-msgstr "Int. Typ"
+msgstr "Int. Art"
 
 #. module: account
 #: field:account.move.line,tax_amount:0
 msgid "Tax/Base Amount"
-msgstr "Betrag für Steuerberechnung"
+msgstr "Grundbetrag für Steuerberechnung"
 
 #. module: account
 #: view:account.payment.term.line:0
@@ -8568,7 +8625,7 @@ msgstr "Tel.:"
 #. module: account
 #: field:account.account,company_currency_id:0
 msgid "Company Currency"
-msgstr "Betriebl. Währung"
+msgstr "Unternehmenswährung"
 
 #. module: account
 #: field:account.aged.trial.balance,chart_account_id:0
@@ -8632,7 +8689,7 @@ msgid "current month"
 msgstr "laufender Monat"
 
 #. module: account
-#: code:addons/account/account.py:1052
+#: code:addons/account/account.py:1057
 #, python-format
 msgid ""
 "No period defined for this date: %s !\n"
@@ -8681,7 +8738,7 @@ msgstr "  Betrag: NV"
 #: model:process.node,name:account.process_node_supplierreconciliation0
 #, python-format
 msgid "Reconciliation"
-msgstr "Ausgleichen Offene Posten"
+msgstr "Ausgleichen offener Posten"
 
 #. module: account
 #: view:account.chart.template:0
@@ -8718,6 +8775,7 @@ msgstr "Journal Gutschriften"
 #. module: account
 #: report:account.account.balance:0
 #: report:account.central.journal:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: report:account.general.ledger:0
 #: report:account.general.ledger_landscape:0
@@ -8761,7 +8819,7 @@ msgid "The partner account used for this invoice."
 msgstr "Partner Finanzkonto dieser Rechnung."
 
 #. module: account
-#: code:addons/account/account.py:3296
+#: code:addons/account/account.py:3313
 #, python-format
 msgid "Tax %.2f%%"
 msgstr "Steuer %.2f%%"
@@ -8784,16 +8842,15 @@ msgid "Payment Term Line"
 msgstr "Zahlungsbedingungen"
 
 #. module: account
-#: code:addons/account/account.py:3109
+#: code:addons/account/account.py:3126
 #, python-format
 msgid "Purchase Journal"
-msgstr "Journal Einkauf"
+msgstr "Einkaufs-Journal"
 
 #. module: account
 #: view:account.invoice.refund:0
 msgid "Refund Invoice: Creates the refund invoice, ready for editing."
-msgstr ""
-"Gutschrift Rechnung: Generiert eine Gutschrift mit Bearbeitungsmöglichkeit"
+msgstr "Rechnungsgutschrift: Legt eine Gutschrift zur Weiterbearbeitung an."
 
 #. module: account
 #: field:account.invoice.line,price_subtotal:0
@@ -8803,7 +8860,7 @@ msgstr "Zwischensumme"
 #. module: account
 #: view:account.vat.declaration:0
 msgid "Print Tax Statement"
-msgstr "Drucke Auswertung Umsatzsteuer"
+msgstr "Drucke Umsatzsteueranmeldung"
 
 #. module: account
 #: view:account.model.line:0
@@ -8828,12 +8885,12 @@ msgstr "Lieferanten"
 #. module: account
 #: view:account.journal:0
 msgid "Accounts Type Allowed (empty for no control)"
-msgstr "zugelassene Kontotypen (leer = alle)"
+msgstr "zugelassene Kontoarten (leer = alle)"
 
 #. module: account
 #: view:res.partner:0
 msgid "Supplier Accounting Properties"
-msgstr "Kreditoren Eigenschaften"
+msgstr "Kreditoren-Eigenschaften"
 
 #. module: account
 #: help:account.move.line,amount_residual:0
@@ -8858,7 +8915,7 @@ msgstr "Von"
 #. module: account
 #: model:ir.model,name:account.model_account_fiscalyear_close
 msgid "Fiscalyear Close"
-msgstr "Geschäftsjahr beenden"
+msgstr "Geschäftsjahr abschließen"
 
 #. module: account
 #: sql_constraint:account.account:0
@@ -8872,10 +8929,10 @@ msgid "Unpaid Invoices"
 msgstr "Offene Rechnungen"
 
 #. module: account
-#: code:addons/account/account_invoice.py:495
+#: code:addons/account/account_invoice.py:504
 #, python-format
 msgid "The payment term of supplier does not have a payment term line!"
-msgstr "Die Zahlungskonditionen des Lieferanten haben keine Zeilen!"
+msgstr "Die Zahlungsbedingungen des Lieferanten enthalten keine Positionen!"
 
 #. module: account
 #: field:account.move.line.reconcile,debit:0
@@ -8940,7 +8997,7 @@ msgstr "Journal Bezeichnung"
 #. module: account
 #: view:account.move.line:0
 msgid "Next Partner Entries to reconcile"
-msgstr "Op-Ausgleich des nächsten Partners"
+msgstr "OP-Ausgleich des nächsten Partners"
 
 #. module: account
 #: selection:account.financial.report,style_overwrite:0
@@ -8958,7 +9015,7 @@ msgid ""
 "Unique number of the invoice, computed automatically when the invoice is "
 "created."
 msgstr ""
-"Einheitliche Rechnungsnummer, automatisch ermittelt bei der Erzeugung der "
+"Eindeutige Rechnungsnummer, automatisch ermittelt bei der Erzeugung der "
 "Rechnung."
 
 #. module: account
@@ -8982,10 +9039,10 @@ msgid "Keep empty for all open fiscal years"
 msgstr "Frei lassen für alle offenen Geschäftsjahre"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1105
+#: code:addons/account/account_move_line.py:1120
 #, python-format
 msgid "The account move (%s) for centralisation has been confirmed!"
-msgstr "Die Buchungszeile (%s)"
+msgstr "Die Buchung (%s) wurde zur Sammlung/Zentralisierung genehmigt!"
 
 #. module: account
 #: help:account.move.line,amount_currency:0
@@ -8993,11 +9050,11 @@ msgid ""
 "The amount expressed in an optional other currency if it is a multi-currency "
 "entry."
 msgstr ""
-"Der Betrag in Fremdwährung, wenn es sich um eine Mulit-Währungsbuchung "
+"Der Betrag in Fremdwährung, wenn es sich um eine Fremd-Währungsbuchung "
 "handelt"
 
 #. module: account
-#: code:addons/account/account.py:1307
+#: code:addons/account/account.py:1315
 #, python-format
 msgid ""
 "You can not validate a non-balanced entry !\n"
@@ -9047,7 +9104,7 @@ msgstr "Erzeugt Sequenz für Anzeige der Bankdetails bei Buchungen"
 #. module: account
 #: model:process.transition,note:account.process_transition_validentries0
 msgid "Accountant validates the accounting entries coming from the invoice."
-msgstr "Ein Buchhalter verbucht die Buchungssätze einer Rechnung"
+msgstr "Ein Buchhalter quittiert die Buchungssätze einer Rechnung"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_fiscalyear_form
@@ -9077,15 +9134,15 @@ msgstr ""
 #: view:account.entries.report:0
 #: model:ir.actions.act_window,name:account.act_account_acount_move_line_reconcile_open
 msgid "Reconciled entries"
-msgstr "Auszugleichende Buchungsposten"
+msgstr "Auszugleichende Buchungen"
 
 #. module: account
 #: field:account.invoice,address_contact_id:0
 msgid "Contact Address"
-msgstr "Kontakt Adresse"
+msgstr "Kontaktadresse"
 
 #. module: account
-#: code:addons/account/account.py:2256
+#: code:addons/account/account.py:2273
 #, python-format
 msgid "Wrong model !"
 msgstr "Falsches Modell!"
@@ -9098,7 +9155,7 @@ msgstr "Erzwinge Periode"
 #. module: account
 #: model:ir.model,name:account.model_account_partner_balance
 msgid "Print Account Partner Balance"
-msgstr "Drucke Partner Saldenliste"
+msgstr "Drucke Partner-Saldenliste"
 
 #. module: account
 #: help:account.financial.report,sign:0
@@ -9109,7 +9166,7 @@ msgid ""
 "accounts that are typically more credited than debited and that you would "
 "like to print as positive amounts in your reports; e.g.: Income account."
 msgstr ""
-"Für Salden die mit umgekehrten Vorzeichen gedruckt werden sollen. zB "
+"Für Salden die mit umgekehrten Vorzeichen gedruckt werden sollen. z. B. "
 "Aufwandskonten negativ, Ertragskonten positiv."
 
 #. module: account
@@ -9122,12 +9179,14 @@ msgstr "Verträge"
 #: field:account.cashbox.line,starting_id:0
 #: field:account.entries.report,reconcile_id:0
 #: field:account.financial.report,balance:0
+#: field:account.financial.report,credit:0
+#: field:account.financial.report,debit:0
 msgid "unknown"
 msgstr "unbekannt"
 
 #. module: account
 #: field:account.fiscalyear.close,journal_id:0
-#: code:addons/account/account.py:3113
+#: code:addons/account/account.py:3130
 #, python-format
 msgid "Opening Entries Journal"
 msgstr "Start Buchungsjournal"
@@ -9150,10 +9209,10 @@ msgstr ""
 "wird durch die Auswertung Gewinn & Verlust generiert."
 
 #. module: account
-#: code:addons/account/account_invoice.py:808
+#: code:addons/account/account_invoice.py:819
 #, python-format
 msgid "Please define sequence on the journal related to this invoice."
-msgstr "BItte definieren Sie Sequenzen für das Journal dieser Rechnung."
+msgstr "Bitte legen Sie Sequenzen für das Journal dieser Rechnung fest."
 
 #. module: account
 #: view:account.move:0
@@ -9180,8 +9239,8 @@ msgid ""
 "Set if the tax computation is based on the computation of child taxes rather "
 "than on the total amount."
 msgstr ""
-"Aktivieren, wenn die Steuerberechnung auf die untergeordneten Steuern beruht "
-"und nicht auf dem Gesamtbetrag"
+"Aktivieren, wenn die Steuerberechnung auf untergeordneten Steuern beruht und "
+"nicht auf dem Gesamtbetrag"
 
 #. module: account
 #: selection:account.tax,applicable_type:0
@@ -9241,7 +9300,7 @@ msgid "Period from"
 msgstr "Gültig ab"
 
 #. module: account
-#: code:addons/account/account.py:3110
+#: code:addons/account/account.py:3127
 #, python-format
 msgid "Sales Refund Journal"
 msgstr "Gutschriften Ausgangsrechnungen Journal"
@@ -9288,10 +9347,10 @@ msgid "Purchase Tax(%)"
 msgstr "Steuer Einkauf (%)"
 
 #. module: account
-#: code:addons/account/account_invoice.py:810
+#: code:addons/account/account_invoice.py:821
 #, python-format
 msgid "Please create some invoice lines."
-msgstr "Bitte erstellen Sie einige Rechnungspositionen"
+msgstr "Bitte erstellen Sie Rechnungspositionen"
 
 #. module: account
 #: report:account.overdue:0
@@ -9304,7 +9363,7 @@ msgid "Display Detail"
 msgstr "Zeige Detail"
 
 #. module: account
-#: code:addons/account/account.py:3118
+#: code:addons/account/account.py:3135
 #, python-format
 msgid "SCNJ"
 msgstr "GSV"
@@ -9343,8 +9402,6 @@ msgstr "Ende der Periode"
 #: field:account.account.template,financial_report_ids:0
 #: model:ir.actions.act_window,name:account.action_account_financial_report_tree
 #: model:ir.actions.act_window,name:account.action_account_report
-#: model:ir.actions.act_window,name:account.action_account_report_bs
-#: model:ir.actions.act_window,name:account.action_account_report_pl
 #: model:ir.ui.menu,name:account.menu_account_reports
 msgid "Financial Reports"
 msgstr "Finanz Reports"
@@ -9359,6 +9416,7 @@ msgstr "Finanz Reports"
 #: field:account.common.journal.report,period_from:0
 #: field:account.common.partner.report,period_from:0
 #: field:account.common.report,period_from:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: field:account.general.journal,period_from:0
 #: report:account.general.ledger:0
@@ -9379,6 +9437,7 @@ msgstr "Start Periode"
 
 #. module: account
 #: field:account.aged.trial.balance,direction_selection:0
+#: report:account.aged_trial_balance:0
 msgid "Analysis Direction"
 msgstr "Analysezeitraum"
 
@@ -9398,7 +9457,7 @@ msgstr "Ansicht Journal"
 
 #. module: account
 #: view:account.move.line:0
-#: code:addons/account/account_move_line.py:1046
+#: code:addons/account/account_move_line.py:1061
 #, python-format
 msgid "Total credit"
 msgstr "Gesamt Haben"
@@ -9412,7 +9471,7 @@ msgstr ""
 #. module: account
 #: report:account.overdue:0
 msgid "Best regards."
-msgstr "Beste Grüsse."
+msgstr "Mit freundlichen Grüssen."
 
 #. module: account
 #: view:account.invoice:0
@@ -9470,6 +9529,7 @@ msgstr "Bankauszüge"
 #: report:account.analytic.account.inverted.balance:0
 #: report:account.central.journal:0
 #: field:account.entries.report,balance:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: report:account.general.ledger:0
 #: report:account.general.ledger_landscape:0
@@ -9552,7 +9612,7 @@ msgstr ""
 "Debitorenkonto."
 
 #. module: account
-#: code:addons/account/wizard/account_automatic_reconcile.py:152
+#: code:addons/account/wizard/account_automatic_reconcile.py:148
 #, python-format
 msgid "You must select accounts to reconcile"
 msgstr "Bitte Konten zum Ausgleich auswählen"
@@ -9585,7 +9645,7 @@ msgstr ""
 #: report:account.third_party_ledger:0
 #: report:account.third_party_ledger_other:0
 msgid "Filters By"
-msgstr "Filter nch"
+msgstr "Filter nach"
 
 #. module: account
 #: model:process.node,note:account.process_node_manually0
@@ -9604,10 +9664,10 @@ msgid "Move"
 msgstr "Buchung"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1153
+#: code:addons/account/account_move_line.py:1168
 #, python-format
 msgid "You can not change the tax, you should remove and recreate lines !"
-msgstr "Die Steuer kann nicht verändert werden. Löschen und Neuerstellen."
+msgstr "Die Steuer kann nicht verändert werden. Löschen und Neuerstellen!"
 
 #. module: account
 #: view:analytic.entries.report:0
@@ -9664,7 +9724,7 @@ msgid "Consolidated Children"
 msgstr "Konsolidierte Konten"
 
 #. module: account
-#: code:addons/account/wizard/account_fiscalyear_close.py:87
+#: code:addons/account/wizard/account_fiscalyear_close.py:103
 #, python-format
 msgid ""
 "The journal must have centralised counterpart without the Skipping draft "
@@ -9729,6 +9789,7 @@ msgstr ""
 #: field:account.common.journal.report,period_to:0
 #: field:account.common.partner.report,period_to:0
 #: field:account.common.report,period_to:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: field:account.general.journal,period_to:0
 #: report:account.general.ledger:0
@@ -9750,7 +9811,7 @@ msgstr "Ende der Periode"
 #. module: account
 #: field:account.move.line,date_maturity:0
 msgid "Due date"
-msgstr "Datum fällig"
+msgstr "Fälligkeitsdatum"
 
 #. module: account
 #: view:account.move.journal:0
@@ -9771,7 +9832,7 @@ msgstr ""
 "\"Einkauf\" für Lieferantenrechnungsjournale\r\n"
 "\"Kassa\" oder \"Bank\" für Kunden und Lieferantenzahlungen\r\n"
 "\"Allgemein\" für alles andere.\r\n"
-"\"Eröffnung/Schluss Buchungen\" für Buchungen des Jahresabschlusses"
+"\"Eröffnungs-/Schluss-Buchungen\" für Buchungen des Jahresabschlusses"
 
 #. module: account
 #: model:ir.model,name:account.model_account_subscription
@@ -9781,7 +9842,7 @@ msgstr "Konto Automatische Buchung"
 #. module: account
 #: report:account.overdue:0
 msgid "Maturity date"
-msgstr "Datum Fällig"
+msgstr "Fälligkeitsdatum"
 
 #. module: account
 #: view:account.subscription:0
@@ -9791,6 +9852,7 @@ msgstr "Eingabe automat. Buchung"
 #. module: account
 #: report:account.account.balance:0
 #: field:account.aged.trial.balance,date_from:0
+#: report:account.aged_trial_balance:0
 #: field:account.balance.report,date_from:0
 #: report:account.central.journal:0
 #: field:account.central.journal,date_from:0
@@ -9798,6 +9860,7 @@ msgstr "Eingabe automat. Buchung"
 #: field:account.common.journal.report,date_from:0
 #: field:account.common.partner.report,date_from:0
 #: field:account.common.report,date_from:0
+#: report:account.financial.report:0
 #: field:account.fiscalyear,date_start:0
 #: report:account.general.journal:0
 #: field:account.general.journal,date_from:0
@@ -9816,7 +9879,7 @@ msgstr "Eingabe automat. Buchung"
 #: field:accounting.report,date_from:0
 #: field:accounting.report,date_from_cmp:0
 msgid "Start Date"
-msgstr "Start Datum"
+msgstr "Anfangsdatum"
 
 #. module: account
 #: help:account.invoice,reconciled:0
@@ -9832,17 +9895,17 @@ msgstr ""
 #: view:account.invoice.report:0
 #: model:process.node,name:account.process_node_supplierdraftinvoices0
 msgid "Draft Invoices"
-msgstr "Entwurf Rechnungen"
+msgstr "Rechnungsentwürfe"
 
 #. module: account
 #: selection:account.account.type,close_method:0
 #: view:account.entries.report:0
 #: view:account.move.line:0
 msgid "Unreconciled"
-msgstr "Offene Posten"
+msgstr "Nicht beglichen"
 
 #. module: account
-#: code:addons/account/account_invoice.py:828
+#: code:addons/account/account_invoice.py:839
 #, python-format
 msgid "Bad total !"
 msgstr "Falsche Summe!"
@@ -9850,7 +9913,7 @@ msgstr "Falsche Summe!"
 #. module: account
 #: field:account.journal,sequence_id:0
 msgid "Entry Sequence"
-msgstr "Eingabe Sequenz"
+msgstr "Eingabereihenfolge"
 
 #. module: account
 #: model:ir.actions.act_window,help:account.action_account_period_tree
@@ -9910,7 +9973,7 @@ msgid "Comparison"
 msgstr "Vergleich"
 
 #. module: account
-#: code:addons/account/account_invoice.py:372
+#: code:addons/account/account_invoice.py:381
 #, python-format
 msgid "Unknown Error"
 msgstr "Unbekannter Fehler"
@@ -9927,7 +9990,7 @@ msgstr ""
 #. module: account
 #: field:account.period,special:0
 msgid "Opening/Closing Period"
-msgstr "Eröffnungs- / Abschlussperiode"
+msgstr "Eröffnungs-/Abschlussperiode"
 
 #. module: account
 #: field:account.account,currency_id:0
@@ -9939,7 +10002,7 @@ msgstr "Alternative Währung"
 #. module: account
 #: model:ir.model,name:account.model_validate_account_move
 msgid "Validate Account Move"
-msgstr "Buchen"
+msgstr "Buchung quittieren"
 
 #. module: account
 #: field:account.account,credit:0
@@ -9949,6 +10012,7 @@ msgstr "Buchen"
 #: report:account.analytic.account.inverted.balance:0
 #: report:account.central.journal:0
 #: field:account.entries.report,credit:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: report:account.general.ledger:0
 #: report:account.general.ledger_landscape:0
@@ -10056,16 +10120,18 @@ msgstr "Analytische Buchungen der letzten 30 Tage"
 #: view:accounting.report:0
 #: selection:accounting.report,filter:0
 #: selection:accounting.report,filter_cmp:0
+#: code:addons/account/report/common_report_header.py:99
 #: model:ir.actions.act_window,name:account.action_account_period_form
 #: model:ir.ui.menu,name:account.menu_action_account_period_form
 #: model:ir.ui.menu,name:account.next_id_23
+#, python-format
 msgid "Periods"
 msgstr "Perioden"
 
 #. module: account
 #: field:account.invoice.report,currency_rate:0
 msgid "Currency Rate"
-msgstr "Wechsellkurs"
+msgstr "Wechselkurs"
 
 #. module: account
 #: view:account.account:0
@@ -10191,14 +10257,14 @@ msgstr "Kontotyp"
 #. module: account
 #: model:ir.actions.act_window,name:account.action_subscription_form_running
 msgid "Running Subscriptions"
-msgstr "Entwurf"
+msgstr "Laufende Abbonnements"
 
 #. module: account
 #: view:report.account.sales:0
 #: view:report.account_type.sales:0
 #: view:report.hr.timesheet.invoice.journal:0
 msgid "This Month"
-msgstr "Dieser Monat"
+msgstr "Diesen Monat"
 
 #. module: account
 #: view:account.analytic.balance:0
@@ -10216,7 +10282,7 @@ msgstr "Periode auswählen"
 #: selection:account.move,state:0
 #: view:account.move.line:0
 msgid "Posted"
-msgstr "Gebucht"
+msgstr "Quittiert"
 
 #. module: account
 #: report:account.account.balance:0
@@ -10228,6 +10294,7 @@ msgstr "Gebucht"
 #: field:account.common.journal.report,date_to:0
 #: field:account.common.partner.report,date_to:0
 #: field:account.common.report,date_to:0
+#: report:account.financial.report:0
 #: field:account.fiscalyear,date_stop:0
 #: report:account.general.journal:0
 #: field:account.general.journal,date_to:0
@@ -10245,13 +10312,13 @@ msgstr "Gebucht"
 #: field:accounting.report,date_to:0
 #: field:accounting.report,date_to_cmp:0
 msgid "End Date"
-msgstr "Ende Datum"
+msgstr "Enddatum"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_account_open_closed_fiscalyear
 #: model:ir.ui.menu,name:account.menu_wizard_account_open_closed_fiscalyear
 msgid "Cancel Opening Entries"
-msgstr "Abbrechen Buchen Jahreseröffnung"
+msgstr "Buchen der Jahreseröffnung abbrechen"
 
 #. module: account
 #: field:account.payment.term.line,days2:0
@@ -10272,10 +10339,10 @@ msgstr "Geschäftsjahr Sequenz"
 #. module: account
 #: selection:account.financial.report,display_detail:0
 msgid "No detail"
-msgstr "Kein Detail"
+msgstr "Keine Details"
 
 #. module: account
-#: code:addons/account/account_analytic_line.py:102
+#: code:addons/account/account_analytic_line.py:100
 #, python-format
 msgid "There is no income account defined for this product: \"%s\" (id:%d)"
 msgstr ""
@@ -10284,7 +10351,7 @@ msgstr ""
 #. module: account
 #: constraint:account.move.line:0
 msgid "You can not create journal items on closed account."
-msgstr "You can not create journal items on closed account."
+msgstr "Sie können auf ein abgeschlossenes Konto nicht mehr buchen."
 
 #. module: account
 #: field:account.account,unrealized_gain_loss:0
@@ -10304,14 +10371,15 @@ msgstr "Status"
 #. module: account
 #: model:ir.actions.server,name:account.ir_actions_server_edi_invoice
 msgid "Auto-email confirmed invoices"
-msgstr "automatischer EMail Versand der Rechnungen"
+msgstr "automatischer E-Mail Versand der Rechnungen"
 
 #. module: account
 #: field:account.invoice,check_total:0
 msgid "Verification Total"
-msgstr "Gesamt Prüfsumme"
+msgstr "Zu prüfende Gesamtsumme"
 
 #. module: account
+#: report:account.aged_trial_balance:0
 #: report:account.analytic.account.balance:0
 #: report:account.analytic.account.inverted.balance:0
 #: report:account.analytic.account.quantity_cost_ledger:0
@@ -10329,7 +10397,7 @@ msgstr "Bruttobetrag"
 #, python-format
 msgid "Journal: All"
 msgstr ""
-"Journal: AlleErstelle und manage die Finanzjournale des Unternehmens Ã¼ber "
+"Journal: Alle Erstelle und manage die Finanzjournale des Unternehmens Ã¼ber "
 "dieses Menü. Ein Journal ist eine lückenlose und chronologische Aufzeichnung "
 "aller Geschäftsvorfälle in einem Unternehmen in Form der doppelten "
 "Buchhaltung. In Abhängigkeit des Anwendungsumfangs der Buchhaltung sowie der "
@@ -10339,6 +10407,7 @@ msgstr ""
 
 #. module: account
 #: field:account.account,company_id:0
+#: report:account.account.balance:0
 #: field:account.aged.trial.balance,company_id:0
 #: field:account.analytic.journal,company_id:0
 #: field:account.balance.report,company_id:0
@@ -10353,7 +10422,9 @@ msgstr ""
 #: field:account.entries.report,company_id:0
 #: field:account.fiscal.position,company_id:0
 #: field:account.fiscalyear,company_id:0
+#: report:account.general.journal:0
 #: field:account.general.journal,company_id:0
+#: report:account.general.ledger_landscape:0
 #: field:account.installer,company_id:0
 #: field:account.invoice,company_id:0
 #: field:account.invoice.line,company_id:0
@@ -10363,6 +10434,8 @@ msgstr ""
 #: view:account.journal:0
 #: field:account.journal,company_id:0
 #: field:account.journal.period,company_id:0
+#: report:account.journal.period.print:0
+#: report:account.journal.period.print.sale.purchase:0
 #: field:account.model,company_id:0
 #: field:account.move,company_id:0
 #: field:account.move.line,company_id:0
@@ -10380,7 +10453,7 @@ msgstr ""
 #: field:analytic.entries.report,company_id:0
 #: field:wizard.multi.charts.accounts,company_id:0
 msgid "Company"
-msgstr "Firma"
+msgstr "Unternehmen"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_action_subscription_form
@@ -10421,12 +10494,12 @@ msgstr "Vorzeichen f. Ã¼berg. Steuer"
 #. module: account
 #: model:ir.model,name:account.model_account_balance_report
 msgid "Trial Balance Report"
-msgstr "Test Auswertung Bilanz"
+msgstr "Salden-Bilanz"
 
 #. module: account
 #: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree
 msgid "Draft statements"
-msgstr "Beleg Entwurf"
+msgstr "Belegentwürfe"
 
 #. module: account
 #: model:process.transition,note:account.process_transition_statemententries0
@@ -10455,14 +10528,14 @@ msgstr "Rechnungspositionen"
 #. module: account
 #: field:account.chart,period_to:0
 msgid "End period"
-msgstr "Ende Periode"
+msgstr "End-Periode"
 
 #. module: account
 #: sql_constraint:account.journal:0
 msgid "The code of the journal must be unique per company !"
 msgstr ""
-"Die Kurzbezeichnung des Journals sollte eindeutig sein je Unternehmen "
-"(Mandant)."
+"Die Kurzbezeichnung des Journals sollte je Unternehmen (Mandant)eindeutig "
+"sein."
 
 #. module: account
 #: help:product.category,property_account_expense_categ:0
@@ -10510,7 +10583,7 @@ msgstr "Auswertung Verkauf nach Konto"
 #. module: account
 #: model:ir.model,name:account.model_account_fiscal_position_account
 msgid "Accounts Fiscal Position"
-msgstr "Steuerzuordnung"
+msgstr "Konten des Haushaltsberichts"
 
 #. module: account
 #: report:account.invoice:0
@@ -10530,6 +10603,7 @@ msgstr "Eingangsrechnungen"
 #: report:account.analytic.account.inverted.balance:0
 #: report:account.central.journal:0
 #: field:account.entries.report,debit:0
+#: report:account.financial.report:0
 #: report:account.general.journal:0
 #: report:account.general.ledger:0
 #: report:account.general.ledger_landscape:0
@@ -10559,10 +10633,12 @@ msgstr "Rechnungszeilen"
 #. module: account
 #: constraint:account.account.template:0
 msgid "Error ! You can not create recursive account templates."
-msgstr "Fehler ! Rekursive Finanzkontenvorlagen sind nicht erlaubt"
+msgstr "Fehler! Rekursive Finanzkontenvorlagen sind nicht erlaubt."
 
 #. module: account
 #: selection:account.print.journal,sort_selection:0
+#: code:addons/account/report/account_journal.py:197
+#, python-format
 msgid "Journal Entry Number"
 msgstr "Belegnummer"
 
@@ -10582,7 +10658,7 @@ msgstr ""
 "mit Buchungen geändert werden."
 
 #. module: account
-#: code:addons/account/account_move_line.py:832
+#: code:addons/account/account_move_line.py:843
 #, python-format
 msgid "Entry is already reconciled"
 msgstr "Buchung wurde bereits ausgeglichen"
@@ -10624,8 +10700,10 @@ msgstr ""
 "geschlossen für nicht mehr verwendete"
 
 #. module: account
+#: report:account.account.balance:0
 #: selection:account.balance.report,display_account:0
 #: selection:account.common.account.report,display_account:0
+#: report:account.general.ledger_landscape:0
 #: selection:account.report.general.ledger,display_account:0
 msgid "With movements"
 msgstr "Konten mit Buchungen"
@@ -10679,7 +10757,7 @@ msgstr "Ãœberfällige Forderungen"
 #. module: account
 #: field:account.tax,applicable_type:0
 msgid "Applicability"
-msgstr "Individualberechnung"
+msgstr "Anwendbarkeit"
 
 #. module: account
 #: code:addons/account/wizard/account_move_journal.py:165
@@ -10741,16 +10819,16 @@ msgstr "Kontenplan Analysekonten"
 #. module: account
 #: help:account.invoice,residual:0
 msgid "Remaining amount due."
-msgstr "verbleibender Restwert nach Zahlung"
+msgstr "Verbleibender, fälliger Restbetrag"
 
 #. module: account
 #: model:ir.ui.menu,name:account.menu_finance_statistic_report_statement
 msgid "Statistic Reports"
-msgstr "Statistische Auswertungen"
+msgstr "Statistische Berichte"
 
 #. module: account
-#: code:addons/account/account_move_line.py:1155
-#: code:addons/account/account_move_line.py:1238
+#: code:addons/account/account_move_line.py:1170
+#: code:addons/account/account_move_line.py:1253
 #, python-format
 msgid "Bad account!"
 msgstr "Falsches Konto!"
@@ -10779,7 +10857,7 @@ msgid "Accounts Mapping"
 msgstr "Zuordnung Finanzkonten"
 
 #. module: account
-#: code:addons/account/account_invoice.py:364
+#: code:addons/account/account_invoice.py:373
 #, python-format
 msgid "Invoice '%s' is waiting for validation."
 msgstr "Rechnung '%s' wartet auf Buchungsfreigabe."
@@ -10907,16 +10985,17 @@ msgstr ""
 "''}${object.address_invoice_id.name or ''},\n"
 "\n"
 "Eine neue Rechnung ist verfügbar: ${object.partner_id.name}:\n"
-"       | Invoice number: *${object.number}*\n"
-"       | Invoice total: *${object.amount_total} ${object.currency_id.name}*\n"
-"       | Invoice date: ${object.date_invoice}\n"
+"       | Rechnungsnummer: *${object.number}*\n"
+"       | Rechnungsbetrag: *${object.amount_total} "
+"${object.currency_id.name}*\n"
+"       | Rechnungsdatum : ${object.date_invoice}\n"
 "       % if object.origin:\n"
 "       | Auftrag: ${object.origin}\n"
 "       % endif\n"
-"       | Ihr Kontakt: ${object.user_id.name} ${object.user_id.user_email and "
-"'<%s>'%(object.user_id.user_email) or ''}\n"
+"       | Ihr Ansprechpartner: ${object.user_id.name} "
+"${object.user_id.user_email and '<%s>'%(object.user_id.user_email) or ''}\n"
 "\n"
-"Sie können dieses Dokument ansehen, herunterladenund Online bezahlen, wenn "
+"Sie können dieses Dokument ansehen, herunterladen und Online bezahlen, wenn "
 "Sie den folgenden Link verwenden:\n"
 "    ${ctx.get('edi_web_url_view') or 'n/a'}\n"
 "\n"
@@ -10941,9 +11020,9 @@ msgstr ""
 "    ${paypal_url}\n"
 "% endif\n"
 "\n"
-"Im Falle von Fragen wollen Sie uns bitte kontaktieren.\n"
+"Im Falle von Fragen können Sie uns gerne kontaktieren.\n"
 "\n"
-"Danke, dass Sie ${object.company_id.name} gewählt haben!\n"
+"Danke, dass Sie ${object.company_id.name} Ihr vertrauen schenken!\n"
 "\n"
 "\n"
 "--\n"
@@ -10964,7 +11043,7 @@ msgstr ""
 "or ''} ${object.company_id.country_id.name or ''}\n"
 "% endif\n"
 "% if object.company_id.phone:\n"
-"Phone: ${object.company_id.phone}\n"
+"Tel.: ${object.company_id.phone}\n"
 "% endif\n"
 "% if object.company_id.website:\n"
 "${object.company_id.website or ''}\n"
@@ -10979,7 +11058,7 @@ msgstr "Bankkonten"
 #. module: account
 #: field:res.partner,credit:0
 msgid "Total Receivable"
-msgstr "Gesamt Forderungen"
+msgstr "Forderungsgesamtsumme"
 
 #. module: account
 #: view:account.account:0
@@ -11039,6 +11118,7 @@ msgstr "account.addtmpl.wizard"
 
 #. module: account
 #: field:account.aged.trial.balance,result_selection:0
+#: report:account.aged_trial_balance:0
 #: field:account.common.partner.report,result_selection:0
 #: report:account.partner.balance:0
 #: field:account.partner.balance,result_selection:0
@@ -11113,17 +11193,19 @@ msgstr "Zentrales Journal"
 #. module: account
 #: report:account.overdue:0
 msgid "Maturity"
-msgstr "überfälllig"
+msgstr "Ãœberfällig"
 
 #. module: account
 #: selection:account.aged.trial.balance,direction_selection:0
+#: code:addons/account/report/account_aged_partner_balance.py:383
+#, python-format
 msgid "Future"
 msgstr "Zukunft"
 
 #. module: account
 #: view:account.move.line:0
 msgid "Search Journal Items"
-msgstr "Suche Journaleinträge"
+msgstr "Durchsuche Buchungen"
 
 #. module: account
 #: help:account.tax,base_sign:0
@@ -11862,9 +11944,6 @@ msgstr ""
 #~ msgid "3 Months"
 #~ msgstr "3 Monate"
 
-#~ msgid "Standard entries"
-#~ msgstr "Standard Buchung"
-
 #~ msgid ""
 #~ "Check this box if you want to print all entries when printing the General "
 #~ "Ledger, otherwise it will only print its balance."
@@ -12637,9 +12716,6 @@ msgstr ""
 #~ msgid "Calculated Balance"
 #~ msgstr "Berechneter Saldo"
 
-#~ msgid "Open For Unreconciliation"
-#~ msgstr "Öffne Storno Ausgleich"
-
 #, python-format
 #~ msgid "CashBox Balance is not matching with Calculated Balance !"
 #~ msgstr "Kassenbestand passt nicht zu Kontensaldo"
@@ -13204,9 +13280,6 @@ msgstr ""
 #~ msgid "Receivable Accounts"
 #~ msgstr "Debitorenkonten"
 
-#~ msgid "Tax codes"
-#~ msgstr "Umsatzsteuererklärung"
-
 #~ msgid ""
 #~ "Streamlines invoice payment and creates hooks to plug automated payment "
 #~ "systems in."
@@ -13231,9 +13304,6 @@ msgstr ""
 #~ msgid "  day of the month= -1"
 #~ msgstr "  Tag des Monats= -1"
 
-#~ msgid "Reconciliation result"
-#~ msgstr "Ergebnis Kontoabstimmung"
-
 #~ msgid ""
 #~ "You cannot create entries on different periods/journals in the same move"
 #~ msgstr ""
@@ -13366,3 +13436,15 @@ msgstr ""
 
 #~ msgid "Description On Invoices"
 #~ msgstr "Beschreibung auf Rechnungen"
+
+#~ msgid "Open For Unreconciliation"
+#~ msgstr "Öffne zur Stornierung des OP-Ausgleichs"
+
+#~ msgid "Tax codes"
+#~ msgstr "Steuerschlüssel"
+
+#~ msgid "Reconciliation result"
+#~ msgstr "Ergebnis Kontoausgleich"
+
+#~ msgid "Standard entries"
+#~ msgstr "Standard-Buchungen"
index 5f41782..4d64af3 100644 (file)
@@ -14,8 +14,8 @@
                                 <field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
                             </group>
                             <group>
-                                <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}"/>
-                                <field name="supplier_taxes_id" colspan="2" attrs="{'readonly':[('purchase_ok','=',0)]}" widget="many2many_tags"/>
+                                <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" />
+                                <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
                             </group>
                         </group>
                     </page>
index 0c488ea..1754988 100644 (file)
           <para style="terp_tblheader_Details_Right">[[ formatLang(sum_all(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'],'credit')) ]] </para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(sum_balance(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(sum_balance(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]</para>
         </td>
         <td>
           <para style="terp_tblheader_Details_Right">[[ formatLang(sum_all(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'],'quantity')) ]]</para>
             <para style="terp_default_Right_9_Bold">[[ formatLang(move_sum(o['id'],data['form']['date1'],data['form']['date2'],'credit')) ]] </para>
           </td>
           <td>
-            <para style="terp_default_Right_9_Bold">[[ formatLang(move_sum_balance(o['id'],data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol]]</para>
+            <para style="terp_default_Right_9_Bold">[[ formatLang(move_sum_balance(o['id'],data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]</para>
           </td>
           <td>
             <para style="terp_default_Right_9_Bold">[[ formatLang(move_sum(o['id'],data['form']['date1'],data['form']['date2'],'quantity')) ]]</para>
               <para style="terp_default_Right_9">[[ formatLang(move_g['credit']) ]] </para>
             </td>
             <td>
-              <para style="terp_default_Right_9">[[ formatLang(move_g['balance'])]] [[ company.currency_id.symbol ]]</para>
+              <para style="terp_default_Right_9">[[ formatLang(move_g['balance'], currency_obj = company.currency_id) ]]</para>
             </td>
             <td>
               <para style="terp_default_Right_9">[[ formatLang(move_g['quantity']) ]]</para>
index 7500b65..1099a8b 100644 (file)
           <para style="terp_Default_Bold_Right_9_U">[[ formatLang (sum_credit(objects,data['form']['date1'],data['form']['date2'])) ]] </para>
         </td>
         <td>
-          <para style="terp_Default_Bold_Right_9_U">[[ formatLang (sum_balance(objects,data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_Default_Bold_Right_9_U">[[ formatLang (sum_balance(objects,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
             <para style="terp_Default_Bold_Right_9_U">[[ formatLang (account_sum_credit(account,data['form']['date1'],data['form']['date2'])) ]] </para>
           </td>
           <td>
-            <para style="terp_Default_Bold_Right_9_U">[[ formatLang (account_sum_balance(account,data['form']['date1'],data['form']['date2']))]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_Default_Bold_Right_9_U">[[ formatLang (account_sum_balance(account,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
               <para style="terp_Default_Bold_Right_9_U">[[ formatLang( move_g['credit']) ]] </para>
             </td>
             <td>
-              <para style="terp_Default_Bold_Right_9_U">[[ formatLang( move_g['balance']) ]] [[ company.currency_id.symbol ]]</para>
+              <para style="terp_Default_Bold_Right_9_U">[[ formatLang( move_g['balance'], currency_obj = company.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
                 <para style="terp_default_9_italic_Rignt">[[ formatLang( move_a['credit']) ]] </para>
               </td>
               <td>
-                <para style="terp_default_9_italic_Rignt">[[ formatLang( move_a['balance']) ]] [[ company.currency_id.symbol]]</para>
+                <para style="terp_default_9_italic_Rignt">[[ formatLang( move_a['balance'], currency_obj = company.currency_id)]]</para>
               </td>
             </tr>
           </blockTable>
index f112ec8..54b6878 100644 (file)
           <para style="terp_tblheader_Details_Right">[[ formatLang(sum_credit(objects,data['form']['date1'],data['form']['date2']))]]</para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(sum_balance(objects,data['form']['date1'],data['form']['date2']))]] [[ company.currency_id.symbol]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(sum_balance(objects,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]</para>
         </td>
         <td>
           <para style="terp_tblheader_Details_Right">[[ formatLang(sum_quantity(objects,data['form']['date1'],data['form']['date2'])) ]]</para>
             <para style="terp_tblheader_Details_Right">[[formatLang(move_g['credit'])]]</para>
           </td>
           <td>
-            <para style="terp_tblheader_Details_Right">[[ formatLang(move_g['balance'])]] [[ company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_Details_Right">[[ formatLang(move_g['balance'], currency_obj = company.currency_id)]]</para>
           </td>
           <td>
             <para style="terp_tblheader_Details_Right">[[formatLang(move_g['quantity']) ]]</para>
               <para style="terp_default_Right_9">[[ formatLang(move_a['credit']) ]] </para>
             </td>
             <td>
-              <para style="terp_default_Right_9">[[ formatLang(move_a['balance']) ]] [[ company.currency_id.symbol]]</para>
+              <para style="terp_default_Right_9">[[ formatLang(move_a['balance'], currency_obj = company.currency_id)]]</para>
             </td>
             <td>
               <para style="terp_default_Right_9">[[ formatLang(move_a['quantity']) ]]</para>
index 8148a01..3d6bf0f 100644 (file)
@@ -63,8 +63,12 @@ class account_analytic_journal_report(osv.osv_memory):
         if context is None:
             context = {}
         res = super(account_analytic_journal_report, self).default_get(cr, uid, fields, context=context)
+        if not context.has_key('active_ids'):
+            journal_ids = self.pool.get('account.analytic.journal').search(cr, uid, [], context=context)
+        else:
+            journal_ids = context.get('active_ids')
         if 'analytic_account_journal_id' in fields:
-            res.update({'analytic_account_journal_id': context.get('active_ids',[])})
+            res.update({'analytic_account_journal_id': journal_ids})
         return res
 
 account_analytic_journal_report()
index 8963ba9..8a421e3 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">analytic.entries.report.tree</field>
         <field name="model">analytic.entries.report</field>
         <field name="arch" type="xml">
-            <tree string="Analytic Entries Analysis">
+            <tree string="Analytic Entries Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="year" invisible="1"/>
                 <field name="day" invisible="1"/>
index 667c61a..5512652 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">account.entries.report.tree</field>
         <field name="model">account.entries.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:move_state == 'draft';black:move_state == 'posted'" string="Entries Analysis">
+            <tree colors="blue:move_state == 'draft';black:move_state == 'posted'" create="false" string="Entries Analysis">
                 <field name="date" invisible="1"/>
                 <field name="date_created" invisible="1"/>
                 <field name="date_maturity" invisible="1"/>
index c22d5d5..13a137e 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">account.invoice.report.tree</field>
         <field name="model">account.invoice.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')"  string="Invoices Analysis">
+            <tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false" string="Invoices Analysis">
                 <field name="date" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="year" invisible="1"/>
index 1b617e9..4ddedc1 100644 (file)
@@ -29,34 +29,11 @@ class Overdue(report_sxw.rml_parse):
         super(Overdue, self).__init__(cr, uid, name, context=context)
         self.localcontext.update( {
             'time': time,
-            'adr_get': self._adr_get,
             'getLines': self._lines_get,
             'tel_get': self._tel_get,
             'message': self._message,
         })
         self.context = context
-    def _adr_get(self, partner, type):
-        res = []
-        res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
-        addresses = res_partner.address_get(self.cr, self.uid, [partner.id], [type])
-        adr_id = addresses and addresses[type] or False
-        result = {
-                  'name': False,
-                  'street': False,
-                  'street2': False,
-                  'city': False,
-                  'zip': False,
-                  'state_id':False,
-                  'country_id': False,
-                 }
-        if adr_id:
-            result = res_partner.read(self.cr, self.uid, [adr_id], context=self.context.copy())
-            result[0]['country_id'] = result[0]['country_id'] and result[0]['country_id'][1] or False
-            result[0]['state_id'] = result[0]['state_id'] and result[0]['state_id'][1] or False
-            return result
-
-        res.append(result)
-        return res
 
     def _tel_get(self,partner):
         if not partner:
index 2d42388..577cb91 100644 (file)
     <blockTable colWidths="286.0,224.0" style="Tableau2">
       <tr>
         <td>
-          <para style="terp_default_9">[[ repeatIn(adr_get(o, 'invoice'),'addr') ]]</para>
         </td>
         <td>
           <para style="terp_default_9">[[ o.title.name or '' ]] [[ o.name ]]</para>
-          <para style="terp_default_9">[[ addr['street'] ]]</para>
-          <para style="terp_default_9">[[ addr['street2'] or removeParentNode('para') ]]</para>
-          <para style="terp_default_9">[[ addr['zip'] ]] [[ addr['city'] ]]</para>
-          <para style="terp_default_9">[[ addr['state_id'] or removeParentNode('para')]]</para>
-          <para style="terp_default_9">[[ addr['country_id'] ]]</para>
+          <para style="terp_default_9">[[ display_address(o.partner_id)] ]]</para>
           <para style="terp_default_9">
             <font color="white"> </font>
           </para>
             <para style="terp_default_Right_9">[[ (line['account_id']['type'] == 'receivable' and formatLang(line['credit']) or 0) or (line['account_id']['type'] == 'payable' and formatLang(line['debit'] * -1) or 0) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ time.strftime('%Y-%m-%d') &gt; formatLang((line['date_maturity'])) and formatLang(line['debit'] - line['credit']) ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ time.strftime('%Y-%m-%d') &gt; formatLang((line['date_maturity'])) and formatLang(line['debit'] - line['credit'], currency_obj = company.currency_id) ]]</para>
           </td>
           <td>
             <para style="terp_default_Centre_9">[[ line['blocked'] and 'X' or '' ]]</para>
           <para style="terp_default_Right_9">[[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['credit'] or 0) or (y['account_id']['type'] == 'payable' and y['debit'] * -1 or 0)), getLines(o), 0))) ]] </para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] &lt; time.strftime('%Y-%m-%d'), getLines(o)), 0))) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] &lt; time.strftime('%Y-%m-%d'), getLines(o)), 0)), currency_obj=company.currency_id) ]]</para>
         </td>
         <td>
           <para style="terp_default_9">
           <para style="terp_default_Bold_9">Balance :</para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0))) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0)), currency_obj = company.currency_id) ]]</para>
         </td>
         <td>
           <para style="terp_default_8">
index ee21b9e..be6ae0d 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">account.treasury.report.tree</field>
         <field name="model">account.treasury.report</field>
         <field name="arch" type="xml">
-            <tree string="Treasury Analysis">
+            <tree string="Treasury Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="fiscalyear_id"/>
                 <field name="period_id"/>
index a2ecd51..cff2c65 100644 (file)
@@ -7,14 +7,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 6.0dev\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-02-08 08:45+0000\n"
+"PO-Revision-Date: 2012-10-12 23:19+0000\n"
 "Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:19+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-14 04:39+0000\n"
+"X-Generator: Launchpad (build 16137)\n"
 
 #. module: account_analytic_plans
 #: view:analytic.plan.create.model:0
@@ -471,7 +471,7 @@ msgstr "Analyt. Verrechnungsvorlage"
 #. module: account_analytic_plans
 #: field:account.analytic.plan.instance,code:0
 msgid "Distribution Code"
-msgstr "Kurzbezeichnung"
+msgstr "Verteilungs-Schlüssel"
 
 #. module: account_analytic_plans
 #: report:account.analytic.account.crossovered.analytic:0
@@ -526,6 +526,8 @@ msgid ""
 "analytic accounts for each plan set. Then, you must attach a plan set to "
 "your account journals."
 msgstr ""
+"Für jede Kostenrechnung muss ein Stammkonto definiert werden. Dann muss ein "
+"Plan definiert werden"
 
 #. module: account_analytic_plans
 #: constraint:account.move.line:0
index bc59801..4865196 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">asset.asset.report.tree</field>
         <field name="model">asset.asset.report</field>
         <field name="arch" type="xml">
-            <tree string="Assets">
+            <tree string="Assets" create="false">
                 <field name="name" invisible="1"/>
                 <field name="asset_id" invisible="1"/>
                 <field name="asset_category_id" invisible="1"/>
index 7868755..fdc358f 100644 (file)
@@ -1,13 +1,8 @@
 <?xml version="1.0" ?>
 <openerp>
     <data>
-    <!-- budget form and tree view from account module *********************************** -->
-        <record id="action_account_budget_post_tree" model="ir.actions.act_window">
-            <field name="name">Budgets</field>
-            <field name="res_model">account.budget.post</field>
-            <field name="view_type">tree</field>
-        </record>
-        <menuitem action="action_account_budget_post_tree" id="menu_action_account_budget_post_tree" parent="account.menu_finance_generic_reporting" sequence="6"/>
+
+        <menuitem name="Budgets" id="menu_action_account_budget_post_tree" parent="account.menu_finance_generic_reporting" sequence="6"/>
 
         <!--
     Budgets
index f8e048b..fd52c96 100644 (file)
@@ -32,7 +32,6 @@ class report_print_check(report_sxw.rml_parse):
             'time': time,
             'get_lines': self.get_lines,
             'fill_stars' : self.fill_stars,
-            'get_zip_line': self.get_zip_line,
         })
     def fill_stars(self, amount):
         amount = amount.replace('Dollars','')
@@ -41,25 +40,6 @@ class report_print_check(report_sxw.rml_parse):
             return ' '.join([amount,'*'*stars])
 
         else: return amount
-
-    def get_zip_line(self, address):
-        '''
-        Get the address line
-        '''
-        ret = ''
-        if address:
-            if address.city:
-                ret += address.city
-            if address.state_id:
-                if address.state_id.name:
-                    if ret:
-                        ret += ', '
-                    ret += address.state_id.name
-            if address.zip:
-                if ret:
-                    ret += ' '
-                ret += address.zip
-        return ret
     
     def get_lines(self, voucher_lines):
         result = []
index bb499a8..f9add2f 100644 (file)
               </td>
               <td>
                 <para style="P15">[[ voucher.partner_id.name ]]</para>
-                <para style="P15">[[ voucher.partner_id.street or removeParentNode('para') ]]</para>
-                <para style="P15">[[ voucher.partner_id.street2 or removeParentNode('para') ]]</para>
-                <para style="P15">[[ get_zip_line(voucher.partner_id) ]] </para>
-                <para style="P15">[[ voucher.partner_id.country_id.name]]</para>
+                <para style="P15">[[ display_address(voucher.partner_id) or removeParentNode('para') ]]</para>
               </td>
             </tr>
           </blockTable>
index 5a2f83f..b1fffca 100644 (file)
               </td>
               <td>
                 <para style="P15">[[ voucher.partner_id.name ]]</para>
-                <para style="P15">[[ voucher.partner_id.street or removeParentNode('para') ]]</para>
-                <para style="P15">[[ voucher.partner_id.street2 or removeParentNode('para') ]]</para>
-                <para style="P15">[[ get_zip_line(voucher.partner_id) ]] </para>
-                <para style="P15">[[ voucher.partner_id.country_id.name]]</para>
+                <para style="P15">[[ display_address(voucher.partner_id) or removeParentNode('para') ]]</para>
               </td>
             </tr>
           </blockTable>
index 4152660..9a4d633 100644 (file)
               </td>
               <td>
                 <para style="P9">[[ voucher.partner_id.name ]] </para>
-                <para style="P15">[[ voucher.partner_id.street2 or removeParentNode('para') ]]</para>
-                <para style="P15">[[ get_zip_line(voucher.partner_id) ]] </para>
-                <para style="P15">[[ voucher.partner_id.country_id.name]]</para>
+                <para style="P15">[[ display_address(voucher.partner_id) or removeParentNode('para') ]]</para>
               </td>
               <td>
                 <para/>
index 8d64ce3..5934306 100644 (file)
@@ -30,7 +30,6 @@ class report_rappel(report_sxw.rml_parse):
         self.localcontext.update({
             'time': time,
             'ids_to_objects': self._ids_to_objects,
-            'adr_get': self._adr_get,
             'getLines': self._lines_get,
             'get_text': self._get_text
         })
@@ -43,11 +42,6 @@ class report_rappel(report_sxw.rml_parse):
                 all_lines.append(line)
         return all_lines
 
-    def _adr_get(self, stat_line, type):
-        res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
-        adr = res_partner.address_get(self.cr, self.uid, [stat_line.partner_id.id], [type])[type]
-        return adr and res_partner.read(self.cr, self.uid, [adr]) or [{}]
-
     def _lines_get(self, stat_by_partner_line):
         pool = pooler.get_pool(self.cr.dbname)
         moveline_obj = pool.get('account.move.line')
index 3d096ec..7f22429 100644 (file)
     <blockTable colWidths="298.0,234.0" style="Tableau2">
       <tr>
         <td>
-          <para style="terp_default_9">[[ repeatIn(adr_get(o,'invoice'),'a' )]]</para>
         </td>
         <td>
           <para style="terp_default_9">[[ o.partner_id.name or '' ]]</para>
-          <para style="terp_default_9">[[ a['street'] or '']]</para>
-          <para style="terp_default_9">[[ a['street2'] or removeParentNode('para') ]]</para>
-          <para style="terp_default_9">[[ a['zip'] or '' ]] [[ a['city'] or '' ]]</para>
-          <para style="terp_default_9">[[( a['state_id'] and a['state_id'][1]) or removeParentNode('para') ]]</para>
-          <para style="terp_default_9">[[( a['country_id'] and a['country_id'][1]) or '']]</para>
+          <para style="terp_default_9">[[ display_address(o.partner_id) or '']]</para>
           <para style="terp_default_9">
             <font color="white"> </font>
           </para>
index 973588e..7ad8978 100644 (file)
             <para style="terp_default_Centre_9">[[line.date=='False' and '-' or formatLang(line.date,date=True) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[formatLang(line.amount) or '-' ]] [[get_company_currency_symbol()]] </para>
+            <para style="terp_default_Right_9">[[formatLang(line.amount, currency_obj= user.company_id.currency_id) or '-' ]] </para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line.amount_currency) ]] [[ line.currency.symbol]] </para>
+            <para style="terp_default_Right_9">[[ formatLang(line.amount_currency, currency_obj= line.currency)]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_default_Bold_9">Total:</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(get_amount_total(o)) or '' ]] [[get_company_currency_symbol()]] </para>
+          <para style="terp_default_Right_9">[[ formatLang(get_amount_total(o), currency_obj= user.company_id.currency_id) or '' ]] </para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(get_amount_total_in_currency(o)) or '' ]] [[get_company_currency_symbol()]] </para>
+          <para style="terp_default_Right_9">[[ formatLang(get_amount_total_in_currency(o), currency_obj= user.company_id.currency_id) or '' ]] </para>
         </td>
       </tr>
     </blockTable>
index 6872bbe..5f9708f 100644 (file)
@@ -32,7 +32,6 @@ class payment_order(report_sxw.rml_parse):
             'time': time,
             'get_invoice_name': self._get_invoice_name,
             'get_company_currency': self._get_company_currency,
-            'get_company_currency_symbol': self._get_company_currency_symbol,
             'get_amount_total_in_currency': self._get_amount_total_in_currency,
             'get_amount_total': self._get_amount_total,
             'get_account_name': self._get_account_name,
@@ -72,12 +71,8 @@ class payment_order(report_sxw.rml_parse):
         user = pool.get('res.users').browse(self.cr, self.uid, self.uid)
         return user.company_id and user.company_id.currency_id and user.company_id.currency_id.symbol or False
 
-    def _get_company_currency_symbol(self):
-        pool = pooler.get_pool(self.cr.dbname)
-        user = pool.get('res.users').browse(self.cr, self.uid, self.uid)
-        return user.company_id and user.company_id.currency_id and user.company_id.currency_id.symbol or False
 
-    def _get_account_name(self, bank_id):
+    def _get_account_name(self,bank_id):
         if bank_id:
             pool = pooler.get_pool(self.cr.dbname)
             value_name = pool.get('res.partner.bank').name_get(self.cr, self.uid, [bank_id])
index 923e900..9f0f2e1 100644 (file)
             <para style="terp_default_9_30cm">[[ p['pname'] ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ p['amount'] ]] [[ voucher.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(p['amount'], currency_obj=voucher.currency_id) ]]</para>
           </td>
         </tr>
         <tr>
           </para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ voucher.amount ]] [[ voucher.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(voucher.amount, currency_obj=voucher.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 15b2433..fbd40ee 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">sale.receipt.report.tree</field>
         <field name="model">sale.receipt.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')"  string="Sales Receipt Analysis">
+            <tree colors="blue:state == 'draft';gray:state in ('cancel','paid');black:state in ('proforma','proforma2')" create="false"  string="Sales Receipt Analysis">
                 <field name="date" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="year" invisible="1"/>
index b041329..c26e1b5 100644 (file)
             <field name="name">audittrail.log.tree</field>
             <field name="model">audittrail.log</field>
             <field name="arch" type="xml">
-                <tree string="AuditTrail Logs">
+                <tree string="AuditTrail Logs" create="false">
                     <field name="timestamp"/>
                     <field name="name"/>
                     <field name="object_id"/>
index 9c1f88b..115e313 100644 (file)
@@ -21,7 +21,7 @@ class res_users(osv.Model):
     }
 
     _sql_constraints = [
-        ('uniq_users_oauth_provider_oauht_uid', 'unique(auth_provider_id, auth_uid)', 'OAuth UID must be unique per provider'),
+        ('uniq_users_oauth_provider_oauth_uid', 'unique(oauth_provider_id, oauth_uid)', 'OAuth UID must be unique per provider'),
     ]
 
     def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None):
index 0a60fe1..33c86e8 100644 (file)
@@ -416,7 +416,7 @@ openerp.base_import = function (instance) {
                             '</div>'
                         ].join('')
                     },
-                })).get(0).scrollIntoView();
+                }));
         },
     });
     // FSM-ize DataImport
index 48c6491..fbe47c0 100644 (file)
@@ -777,7 +777,6 @@ class crm_lead(base_stage, format_address, osv.osv):
             'default_user_id': uid,
             'default_section_id': opportunity.section_id and opportunity.section_id.id or False,
             'default_email_from': opportunity.email_from,
-            'default_state': 'open',
             'default_name': opportunity.name,
         }
         return res
index 1da78e5..ba46cc0 100644 (file)
                                 <field name="allow_unlink"/>
                             </group>
                             <separator string="Team Members"/>
-                            <field name="member_ids"/>
+                            <field name="member_ids" widget="many2many_kanban">
+                                <kanban quick_create="false" create="true">
+                                    <field name="name"/>
+                                    <templates>
+                                        <t t-name="kanban-box">
+                                            <div style="position: relative">
+                                                <a t-if="! read_only_mode" type="delete" style="position: absolute; right: 0; padding: 4px; diplay: inline-block">X</a>
+                                                <div class="oe_module_vignette">
+                                                    <div class="oe_module_desc">
+                                                        <field name="name"/>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </t>
+                                    </templates>
+                                </kanban>
+                            </field>
                         </page>
                         <page string="Stages">
                             <separator string="Select Stages for this Sales Team"/>
index 35ed941..a17633d 100644 (file)
@@ -8,7 +8,7 @@
             <field name="name">crm.lead.report.tree</field>
             <field name="model">crm.lead.report</field>
             <field name="arch" type="xml">
-            <tree string="Leads Analysis">
+            <tree string="Leads Analysis" create="false">
                 <field name="creation_year" invisible="1"/>
                 <field name="creation_month" invisible="1"/>
                 <field name="creation_day" invisible="1"/>
             <field name="name">crm.lead.report.tree</field>
             <field name="model">crm.lead.report</field>
             <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " string="Opportunities Analysis">
+            <tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " create="false" string="Opportunities Analysis">
                 <field name="creation_year" invisible="1"/>
                 <field name="creation_month" invisible="1"/>
                 <field name="creation_day" invisible="1"/>
index ec7ea5e..a2120ae 100644 (file)
@@ -8,7 +8,7 @@
             <field name="name">crm.phonecall.report.tree</field>
             <field name="model">crm.phonecall.report</field>
             <field name="arch" type="xml">
-                <tree string="Phone calls">
+                <tree string="Phone calls" create="false">
                     <field name="name" invisible="1"/>
                     <field name="month" invisible="1"/>
                     <field name="section_id" invisible="1"/>
index b04853d..6f431b9 100644 (file)
@@ -32,6 +32,13 @@ class crm_configuration(osv.osv_memory):
         'group_fund_raising': fields.boolean("Manage Fund Raising",
             implied_group='crm.group_fund_raising',
             help="""Allows you to trace and manage your activities for fund raising."""),
+        'module_crm_claim':fields.boolean("Manage Customer Claims",
+            help="""Allows you to track your customers/suppliers claims and grievances.
+                    This installs the module crm_claim."""),
+        'module_crm_helpdesk':fields.boolean("Manage Helpdesk and Support",
+            help="""Allows you to communicate with Customer,  process Customer query, and provide better help and support. This installs the module crm_helpdesk."""),
+        
+        
     }
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 6330d7a..9534c86 100644 (file)
@@ -7,6 +7,22 @@
             <field name="model">sale.config.settings</field>
             <field name="inherit_id" ref="base_setup.view_sale_config_settings"/>
             <field name="arch" type="xml">
+                   <div name="config_sale" position="before">
+                       <separator string="After-Sale Services"/>
+                    <group>
+                        <label for="id" string="Features"/>
+                        <div>
+                            <div>
+                                <field name="module_crm_claim" class="oe_inline"/>
+                                <label for="module_crm_claim"/>
+                            </div>
+                            <div>
+                                <field name="module_crm_helpdesk" class="oe_inline"/>
+                                <label for="module_crm_helpdesk"/>
+                            </div>
+                        </div>
+                    </group>
+                   </div>
                 <group name="On Mail Client" version="7.0" position="after">
                     <group>
                         <label for="id" string="On Mail Server"/>
index f5ab836..dfc5494 100644 (file)
     'version': '1.0',
     'category': 'Customer Relationship Management',
     'description': """
-This modules allows you to track your customers/suppliers claims and grievances.
+
+Manage Customer Claims.
 ================================================================================
+This application allows you to track your customers/suppliers claims and grievances.
 
 It is fully integrated with the email gateway so that you can create
 automatically new claims based on incoming emails.
index 5a3a3d9..a61490c 100644 (file)
@@ -8,7 +8,7 @@
             <field name="name">crm.claim.report.tree</field>
             <field name="model">crm.claim.report</field>
             <field name="arch" type="xml">
-               <tree string="Claims">
+               <tree string="Claims" create="false">
                     <field name="name" invisible="1"/>
                     <field name="month" invisible="1"/>
                     <field name="section_id" invisible="1"/>
index 4750fa3..05f5026 100644 (file)
@@ -8,7 +8,7 @@
             <field name="name">crm.helpdesk.report.tree</field>
             <field name="model">crm.helpdesk.report</field>
             <field name="arch" type="xml">
-                <tree string="Helpdesk">
+                <tree string="Helpdesk" create="false">
                     <field name="name" invisible="1"/>
                     <field name="month" invisible="1"/>
                     <field name="section_id" invisible="1"/>
index 662a7c3..ee9266a 100644 (file)
@@ -65,7 +65,7 @@
             <field name="name">crm.lead.assign.report.tree</field>
             <field name="model">crm.lead.report.assign</field>
             <field name="arch" type="xml">
-            <tree string="Opportunities Assignment Analysis">
+            <tree string="Opportunities Assignment Analysis" create="false">
                 <field name="year" invisible="1"/>
                 <field name="month" invisible="1"/>
                 <field name="date_assign" invisible="1"/>
index 107328a..eb2c868 100644 (file)
@@ -41,7 +41,7 @@
             <field name="name">crm.partner.assign.report.tree</field>
             <field name="model">crm.partner.report.assign</field>
             <field name="arch" type="xml">
-            <tree string="Opportunities Assignment Analysis">
+            <tree string="Opportunities Assignment Analysis" create="false">
                 <field name="partner_id" invisible="1"/>
                 <field name="country_id" invisible="1"/>
                 <field name="grade_id" invisible="1"/>
index 3ae783f..37a0219 100644 (file)
@@ -36,8 +36,7 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['roo
 
 class document_file(osv.osv):
     _inherit = 'ir.attachment'
-    _rec_name = 'datas_fname'
-
+    _rec_name = 'name'
 
     def _attach_parent_id(self, cr, uid, ids=None, context=None):
         """Migrate ir.attachments to the document module.
@@ -149,29 +148,12 @@ class document_file(osv.osv):
     _sql_constraints = [
         # filename_uniq is not possible in pure SQL
     ]
-    def _check_duplication(self, cr, uid, vals, ids=None, op='create'):
-        name = vals.get('name', False)
-        parent_id = vals.get('parent_id', False)
-        res_model = vals.get('res_model', False)
-        res_id = vals.get('res_id', 0)
-        if op == 'write':
-            for file in self.browse(cr, uid, ids): # FIXME fields_only
-                if not name:
-                    name = file.name
-                if not parent_id:
-                    parent_id = file.parent_id and file.parent_id.id or False
-                if not res_model:
-                    res_model = file.res_model and file.res_model or False
-                if not res_id:
-                    res_id = file.res_id and file.res_id or 0
-                res = self.search(cr, uid, [('id', '<>', file.id), ('name', '=', name), ('parent_id', '=', parent_id), ('res_model', '=', res_model), ('res_id', '=', res_id)])
-                if len(res):
-                    return False
-        if op == 'create':
-            res = self.search(cr, uid, [('name', '=', name), ('parent_id', '=', parent_id), ('res_id', '=', res_id), ('res_model', '=', res_model)])
-            if len(res):
-                return False
-        return True
+
+    def onchange_file(self, cr, uid, ids, datas_fname=False, context=None):
+        res = {'value':{}}
+        if datas_fname:
+            res['value'].update({'name': datas_fname})
+        return res
 
     def check(self, cr, uid, ids, mode, context=None, values=None):
         """Check access wrt. res_model, relax the rule of ir.attachment parent
@@ -219,8 +201,6 @@ class document_file(osv.osv):
         res = self.search(cr, uid, [('id', 'in', ids)])
         if not len(res):
             return False
-        if not self._check_duplication(cr, uid, vals, ids, 'write'):
-            raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
 
         # if nodes call this write(), they must skip the code below
         from_node = context and context.get('__from_node', False)
@@ -286,22 +266,8 @@ class document_file(osv.osv):
         else:
             if vals.get('file_size'):
                 del vals['file_size']
-        result = self._check_duplication(cr, uid, vals)
-        if not result:
-            domain = [
-                ('res_id', '=', vals['res_id']),
-                ('res_model', '=', vals['res_model']),
-                ('datas_fname', '=', vals['datas_fname']),
-            ]
-            attach_ids = self.search(cr, uid, domain, context=context)
-            super(document_file, self).write(cr, uid, attach_ids,
-                                             {'datas' : vals['datas']},
-                                             context=context)
-            result = attach_ids[0]
-        else:
-            #raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
-            result = super(document_file, self).create(cr, uid, vals, context)
-        return result
+
+        return super(document_file, self).create(cr, uid, vals, context)
 
     def __get_partner_id(self, cr, uid, res_model, res_id, context=None):
         """ A helper to retrieve the associated partner from any res_model+id
index b631583..54776c4 100644 (file)
         <field name="priority" eval="1"/>
         <field name="inherit_id" ref="base.view_attachment_form"/>
         <field name="arch" type="xml">
+            <xpath expr="//field[@name='datas_fname']" position="replace">
+                <field name="datas_fname" invisible="1" on_change="onchange_file(datas_fname)"/>
+            </xpath>
             <field name="url" position="after">
                 <field name="user_id"/>
             </field>
         <field name="value" eval="'ir.actions.act_window,%d'%action_document_file_directory_form"/>
     </record>
 
-    <record model="ir.ui.view" id="view_attachment_form_inherit">
-        <field name="name">ir.attachment.view.inherit</field>
-        <field name="model">ir.attachment</field>
-        <field name="inherit_id" ref="base.view_attachment_form"/>
-        <field name="arch" type="xml">
-            <field name="datas_fname" position = "replace" >
-            </field>
-        </field>
-    </record>
 
     <record model="ir.ui.view" id="view_process_node_form_inherit1">
         <field name="name">process.node.form</field>
index 71560aa..c62fef1 100644 (file)
@@ -4,14 +4,8 @@ import textwrap
 import simplejson
 import werkzeug.wrappers
 
-try:
-    # embedded
-    import openerp.addons.web.common.http as openerpweb
-    import openerp.addons.web.controllers.main as webmain
-except ImportError:
-    # standalone
-    import web.common.http as openerpweb
-    import web.controllers.main as webmain
+import openerp.addons.web.http as openerpweb
+import openerp.addons.web.controllers.main as webmain
 
 class EDI(openerpweb.Controller):
     # http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX
index 8d5bc26..655f5b9 100644 (file)
@@ -39,7 +39,7 @@
                             attrs="{'invisible':[('use_template','=',False)]}"
                             on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
                     </xpath>
-                    <xpath expr="//button[@class='oe_mail_compose_message_attachment']" position="before">
+                    <xpath expr="//button[@name='dummy']" position="before">
                         <button icon="/email_template/static/src/img/email_template.png"
                             type="object" name="toggle_template" string=""
                             help="Use a message template"
index d86fd92..b3aee24 100644 (file)
@@ -267,25 +267,18 @@ class event_event(osv.osv):
             return {'value': dic}
 
     def on_change_address_id(self, cr, uid, ids, address_id, context=None):
-        values = {
-            'street' : False,
-            'street2' : False,
-            'city' : False,
-            'zip' : False,
-            'country_id' : False,
-            'state_id' : False,
-        }
-        if isinstance(address_id, (long, int)):
-            address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
-            values.update({
-                'street' : address.street,
-                'street2' : address.street2,
-                'city' : address.city,
-                'country_id' : address.country_id and address.country_id.id,
-                'state_id' : address.state_id and address.state_id.id,
-                'zip' : address.zip,
-            })
-
+        values = {}
+        if not address_id:
+            return values
+        address = self.pool.get('res.partner').browse(cr, uid, address_id, context=context)
+        values.update({
+            'street' : address.street,
+            'street2' : address.street2,
+            'city' : address.city,
+            'country_id' : address.country_id and address.country_id.id or False,
+            'state_id' : address.state_id and address.state_id.id or False,
+            'zip' : address.zip,
+        })
         return {'value' : values}
 
 
index ecd40e0..6874275 100644 (file)
                             <label for="name" class="oe_edit_only"/>
                             <h1><field name="name"/></h1>
                         </div>
-                        <div>
+                        <group>
                             <group>
-                                <group>
-                                    <label for="address_id" string="Location"/>
-                                    <div>
-                                        <field name="address_id" on_change="on_change_address_id(address_id)" />
-                                        <field name="street" placeholder="Street..."/>
-                                        <field name="street2"/>
-                                        <div class="address_format">
-                                            <field name="city" placeholder="City" style="width: 40%%"/>
-                                            <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}'/>
-                                            <field name="zip" placeholder="ZIP" style="width: 20%%"/>
-                                        </div>
-                                        <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}'/>
-                                    </div>
-                                </group>
-                                <group>
-                                    <field name="type" on_change="onchange_event_type(type,context)"/>
-                                    <field name="date_begin"/>
-                                    <field name="date_end"/>
-                                    <field name="company_id" groups="base.group_multi_company"/>
-                                </group>
+                                <label for="address_id" string="Location"/>
+                                   <div>
+                                       <field name="address_id" on_change="on_change_address_id(address_id)" />
+                                       <field name="street" placeholder="Street..."/>
+                                       <field name="street2"/>
+                                       <div class="address_format">
+                                           <field name="city" placeholder="City" style="width: 40%%"/>
+                                           <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": true}'/>
+                                           <field name="zip" placeholder="ZIP" style="width: 20%%"/>
+                                       </div>    
+                                       <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": true}'/>
+                                   </div>
                             </group>
-                        </div>
+                            <group>
+                                <field name="type" on_change="onchange_event_type(type,context)" />
+                                <field name="date_begin"/>
+                                <field name="date_end"/>
+                                <field name="company_id" groups="base.group_multi_company"/>
+                            </group>
+                        </group>
                         <notebook>
                             <page string="Email Configuration" groups="base.group_no_one">
                                 <group>
                             <t t-if="record.register_avail.raw_value != 0">
                               <t t-if="!record.is_subscribed.raw_value">
                                 <input t-att-id="record.id.raw_value" type="text" name="subscribe" class="no_of_seats" value="1" onchange="document.getElementById('btn_sub' +this.id).setAttribute('data-context',JSON.stringify({'ticket':this.value}))"/>
-                                <button t-att-id="'btn_sub'+record.id.raw_value" type="object" name="subscribe_to_event" class="oe_mail_button_follow">
+                                <button t-att-id="'btn_sub'+record.id.raw_value" type="object" name="subscribe_to_event" class="oe_subscribe_button">
                                     <span >Subscribe</span>
                                 </button>
                               </t>
                             </t>
                             <t t-if="record.is_subscribed.raw_value">
-                              <button type="object" name="unsubscribe_to_event" class="oe_mail_button_unfollow">
+                              <button type="object" name="unsubscribe_to_event" class="oe_unsubscribe_button ">
                                 <span>Subscribed</span>
                                 <span class="unsubscribe">Unsubscribe</span>
                               </button>
index 060b1ef..042676d 100644 (file)
@@ -23,16 +23,16 @@ from osv import fields, osv
 import tools
 
 class report_event_registration(osv.osv):
-
     _name = "report.event.registration"
     _description = "Events Analysis"
     _auto = False
     _columns = {
         'event_date': fields.char('Event Start Date', size=64, readonly=True),
         'year': fields.char('Year', size=4, readonly=True),
-        'month': fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
-            ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
-            ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+        'month': fields.selection([
+            ('01','January'), ('02','February'), ('03','March'), ('04','April'),
+            ('05','May'), ('06','June'), ('07','July'), ('08','August'),
+            ('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
         'event_id': fields.many2one('event.event', 'Event', required=True),
         'draft_state': fields.integer(' # No of Draft Registrations', size=20),
         'confirm_state': fields.integer(' # No of Confirmed Registrations', size=20),
@@ -48,17 +48,18 @@ class report_event_registration(osv.osv):
         'company_id': fields.many2one('res.company', 'Company', readonly=True),
     }
     _order = 'event_date desc'
+
     def init(self, cr):
         """
-        initialize the sql view for the event registration
-        cr -- the cursor
+        Initialize the sql view for the event registration
         """
         tools.drop_view_if_exists(cr, 'report_event_registration')
-        cr.execute("""
-         CREATE OR REPLACE view report_event_registration AS (
-                SELECT
-                event_id,
-                r.id,
+
+        # TOFIX this request won't select events that have no registration
+        cr.execute(""" CREATE VIEW report_event_registration AS (
+            SELECT
+                e.id::char || '/' || coalesce(r.id::char,'') AS id,
+                e.id AS event_id,
                 e.user_id AS user_id,
                 r.user_id AS user_id_registration,
                 r.name AS name_registration,
@@ -72,23 +73,21 @@ class report_event_registration(osv.osv):
                 CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
                 e.type AS event_type,
                 e.register_max AS register_max,
-                e.state AS  event_state,
-                r.state AS  registration_state
-                FROM
+                e.state AS event_state,
+                r.state AS registration_state
+            FROM
                 event_event e
+                LEFT JOIN event_registration r ON (e.id=r.event_id)
 
-                LEFT JOIN
-                    event_registration r ON (e.id=r.event_id)
-
-               GROUP BY
+            GROUP BY
                 event_id,
                 user_id_registration,
-                e.id,
                 r.id,
                 registration_state,
                 r.nb_register,
-                event_type, e.id, e.date_begin, e.main_speaker_id,
-                e.register_max,event_id, e.user_id,e.company_id,
+                event_type,
+                e.id,
+                e.date_begin,
                 e.user_id,
                 event_state,
                 e.company_id,
@@ -97,9 +96,8 @@ class report_event_registration(osv.osv):
                 month,
                 e.register_max,
                 name_registration
-
-              )
-                """)
+        )
+        """)
 
 report_event_registration()
 
index f39b6ae..249757e 100644 (file)
@@ -1,13 +1,13 @@
 <?xml version="1.0"?>
 <openerp>
-   <data>
+    <data>
 
-    <!-- report , event on registration... start -->
+        <!-- Report, event on registration -->
         <record model="ir.ui.view" id="report_event_registration_tree">
             <field name="name">report.event.registration.tree</field>
             <field name="model">report.event.registration</field>
             <field name="arch" type="xml">
-                <tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" string="Events Analysis">
+                <tree colors="blue:event_state == 'draft';black:event_state == 'confirm';gray:event_state in('done','cancel')" create="false" string="Events Analysis">
                     <field name="event_date" invisible="1"/>
                     <field name="user_id" invisible="1"/>
                     <field name="speaker_id" invisible="1"/>
@@ -28,7 +28,6 @@
             </field>
         </record>
 
-
         <record model ="ir.ui.view" id="report_event_registration_graph">
             <field name="name">report.event.registration.graph</field>
             <field name="model">report.event.registration</field>
@@ -42,8 +41,7 @@
             </field>
         </record>
 
-              <!-- Event on Registration search view -->
-
+        <!-- Event on Registration search view -->
         <record model="ir.ui.view" id="view_report_event_registration_search">
             <field name="name">report.event.registration.search</field>
             <field name="model">report.event.registration</field>
             </field>
         </record>
 
-        <record  model="ir.actions.act_window" id="action_report_event_registration">
+        <record model="ir.actions.act_window" id="action_report_event_registration">
             <field name="name">Events Analysis</field>
             <field name="res_model">report.event.registration</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,graph</field>
             <field name="search_view_id" ref="view_report_event_registration_search"/>
-            <field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}</field>
+            <field name="context">{"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, "group_by_no_leaf":1, "group_by":[]}</field>
         </record>
 
-       <record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
+        <record model="ir.actions.act_window.view" id="action_report_event_registration_tree">
             <field name="sequence" eval="1"/>
             <field name="view_mode">tree</field>
             <field name="view_id" ref="report_event_registration_tree"/>
             <field name="act_window_id" ref="action_report_event_registration"/>
-       </record>
+        </record>
 
-       <record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
+        <record model="ir.actions.act_window.view" id="action_report_event_registration_graph">
             <field name="sequence" eval="2"/>
             <field name="view_mode">graph</field>
             <field name="view_id" ref="report_event_registration_graph"/>
             <field name="act_window_id" ref="action_report_event_registration"/>
-       </record>
+        </record>
 
         <menuitem parent="base.menu_reporting" id="menu_reporting_events" sequence="30" groups="event.group_event_manager" name="Events"/>
         <menuitem parent="menu_reporting_events" action="action_report_event_registration" id="menu_report_event_registration" sequence="3" groups="event.group_event_manager"/>
index 8602ea2..f49f547 100644 (file)
     width:256px;
     border: 1px solid #eeeeee;
 }
+.oe_unsubscribe, .oe_unsubscribe_button:hover span {
+   display: none;
+ }
+.oe_unsubscribe_button:hover .oe_unsubscribe {
+   display: inline;
+ }
 
index 52f935a..ab7568d 100644 (file)
@@ -6,10 +6,10 @@
              <field name="model">product.product</field>
              <field name="inherit_id" ref="product.product_normal_form_view" />
              <field name="arch" type="xml">
-                <field name="purchase_ok" position="before">
+                <div name="options" position="inside">
                     <field name="event_ok" on_change="onchange_event_ok(event_ok, context)"/>
                     <label for="event_ok"/>
-                </field>
+                </div>
                 <field name='default_code' position='before'>
                     <field name="event_type_id" attrs="{'readonly': [('event_ok', '=', False)]}"/>
                 </field>
index b02f2e9..8b9a412 100644 (file)
@@ -27,7 +27,6 @@
     'category': 'Tools',
     'installable': True,
     'auto_install': False,
-    'web': True,
     'js': ['static/src/js/gdocs.js'],
     'data': [
         'security/ir.model.access.csv',
index f1477f9..5ff8053 100644 (file)
@@ -26,8 +26,11 @@ try:
     from gdata.client import RequestError
     from gdata.docs.service import DOCUMENT_LABEL
     import gdata.auth
+    from gdata.docs.data import Resource
 except ImportError:
-    raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list.'))
+    import logging
+    _logger = logging.getLogger(__name__)
+    _logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list")
 
 class google_docs_ir_attachment(osv.osv):
     _inherit = 'ir.attachment'
index 4aabba3..e6c4223 100644 (file)
@@ -8,9 +8,10 @@
             <field name="name">google_docs.config.tree</field>
             <field name="model">google.docs.config</field>
             <field name="arch" type="xml">
-                <group name="default_filters" position="inside">
+                <tree string="Google Docs Configuration">
                     <field name="model_id"/>
-                </group>
+                    <field name="name_template"/>
+                </tree>
             </field>
         </record>
 
             <field name="name">google_docs.config.form</field>
             <field name="model">google.docs.config</field>
             <field name="arch" type="xml">
-            <group colspan='4'>
-                <field name="model_id"/>
-                <field name='gdocs_resource_id'/>
-                <field name='name_template'/>
-            </group>
+                <form string="Google Docs Configuration" version="7.0">
+                <group>
+                    <field name="model_id"/>
+                    <label for='gdocs_resource_id'/>
+                    <div>
+                        <field name='gdocs_resource_id'/>
+                        <p class="oe_grey">
+This is the id of the template document, on google side. You can find it thanks to its URL:
+<ul>
+<li>for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`</li>
+<li>for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`</li>
+<li>for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`</li>
+<li>for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`</li>
+</ul>
+                        </p>
+                    </div>
+                    <field name='name_template'/>
+                </group>
+                </form>
             </field>
         </record>
 
index b8020d0..361bb58 100644 (file)
                         <field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
                     </header>
                     <sheet>
-                        <label for="name" class="oe_edit_only"/>
-                        <h1>
-                            <field name="name" class="oe_inline"/>
-                            <label class="oe_inline" string="(" attrs="{'invisible': [('department_id', '=', False)]}"/>
-                            <field name="department_id" class="oe_inline"/>
-                            <label class="oe_inline" string=")" attrs="{'invisible': [('department_id', '=', False)]}"/>
-                        </h1>
+                        <div class="oe_title">
+                            <label for="name" class="oe_edit_only"/>
+                            <h1><field name="name" class="oe_inline"/></h1>
+                        </div>
                         <group>
                             <group>
                                 <field name="no_of_employee" groups="base.group_user"/>
                             </group>
                             <group>
                                 <field name="company_id" widget="selection" groups="base.group_multi_company"/>
-                            </group>
+                                <field name="department_id"/>                            </group>
                         </group>
                         <div>
                             <label for="description"/>
index fb1186a..d4907c9 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">hr.evaluation.report.tree</field>
         <field name="model">hr.evaluation.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')"
+            <tree colors="blue:state == 'draft';black:state in ('wait','progress');gray:state in('done','cancel')" create="false"
              string="Appraisal Analysis">
                 <field name="create_date" invisible="1"/>
                 <field name="employee_id" invisible="1"/>
index 91dc44f..487e4f5 100644 (file)
@@ -243,7 +243,7 @@ class product_product(osv.osv):
         data_obj = self.pool.get('ir.model.data')
         cat_id = data_obj._get_id(cr, uid, 'hr_expense', 'cat_expense')
         categ_id = data_obj.browse(cr, uid, cat_id).res_id
-        res = {'value' : {'type':'service','procure_method':'make_to_stock','supply_method':'buy','purchase_ok':True,'sale_ok' :False,'categ_id':categ_id }}
+        res = {'value' : {'type':'service','sale_ok' :False,'categ_id':categ_id }}
         return res
 
 product_product()
index 44853ce..76393d9 100644 (file)
             <field name="model">product.product</field>
             <field name="inherit_id" ref="product.product_normal_form_view"/>
             <field name="arch" type="xml">
-                <field name="purchase_ok" position="before">
+                <div name="options" position="inside">
                     <field name="hr_expense_ok" on_change="on_change_hr_expense_ok(hr_expense_ok)"/>
                     <label for="hr_expense_ok"/>
-                </field>
+                </div>
             </field>
         </record>
 
index bf456cf..3e07516 100644 (file)
             <para style="terp_default_Right_9">[[ formatLang(line.unit_quantity) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line.total_amount) ]] [[ o.currency_id.symbol ]] </para>
+            <para style="terp_default_Right_9">[[ formatLang(line.total_amount, currency_obj=o.currency_id) ]] </para>
           </td>
         </tr>
         <tr>
           <para style="terp_tblheader_Details">Total:</para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(o.amount) ]] [[ o.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(o.amount, currency_obj=o.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 1cd1e10..9f94c26 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">hr.expense.report.tree</field>
         <field name="model">hr.expense.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" string="Expenses Analysis">
+            <tree colors="blue:state == 'draft';black:state in ('confirm','accepted','done');gray:state == 'cancelled'" create="false" string="Expenses Analysis">
                 <field name="employee_id" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="year" invisible="1"/>
index 0455302..092424e 100644 (file)
@@ -9,6 +9,7 @@ access_product_template_hr_expense_user,product.template.hr.expense.user,product
 access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,base.group_hr_user,1,1,1,1\r
 access_product_price_type_user,product.price.type.user,product.model_product_price_type,base.group_hr_user,1,1,1,1\r
 access_account_journal_user,account.journal.user,account.model_account_journal,base.group_hr_user,1,1,1,1\r
+access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0\r
 access_account_invoice_user,account.invoice.user,account.model_account_invoice,base.group_hr_user,1,1,1,1\r
 access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,base.group_hr_user,1,1,1,1\r
 access_account_analytic_journal_user,account.ianalytic.journal.user,account.model_account_analytic_journal,base.group_hr_user,1,1,1,1\r
index ae85b03..6e3c9b2 100644 (file)
 
         <menuitem name="My Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
 
+        <record model="ir.actions.act_window" id="request_approve_allocation">
+            <field name="name">Allocation Requests to Approve</field>
+            <field name="res_model">hr.holidays</field>
+            <field name="view_type">form</field>
+            <field name="context">{'default_type': 'add', 'search_default_approve':1}</field>
+            <field name="domain">[('type','=','add')]</field>
+            <field name="view_id" ref="allocation_leave_new"/>
+            <field name="search_view_id" ref="view_hr_holidays_filter"/>
+        </record>
+
+        <record model="ir.actions.act_window.view" id="action_request_approve_allocation_tree">
+            <field name="sequence" eval="1"/>
+            <field name="view_mode">tree</field>
+            <field name="view_id" ref="view_holiday_allocation_tree"/>
+            <field name="act_window_id" ref="request_approve_allocation"/>
+        </record>
+
+        <record model="ir.actions.act_window.view" id="action_request_approve_allocation_form">
+            <field name="sequence" eval="2"/>
+            <field name="view_mode">form</field>
+            <field name="view_id" ref="allocation_leave_new"/>
+            <field name="act_window_id" ref="request_approve_allocation"/>
+        </record>
+
+        <menuitem parent="menu_open_ask_holidays" id="menu_request_approve_allocation" action="request_approve_allocation" groups="base.group_hr_manager"/>
+
         <record model="ir.actions.act_window" id="open_company_allocation">
             <field name="name">Leaves Summary</field>
             <field name="res_model">hr.holidays</field>
index b3a5de9..8a5897c 100644 (file)
             <para style="P2">[[ formatLang(r['amount']) ]]</para>
           </td>
           <td>
-            <para style="P3">[[ formatLang(r['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]</para>
+            <para style="P3">[[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="P15">Total:</para>
         </td>
         <td>
-          <para style="P11">[[ formatLang(sum_total()) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]</para>
+          <para style="P11">[[ formatLang(sum_total(), currency_obj = o.company_id and o.company_id.currency_id)]]</para>
         </td>
       </tr>
     </blockTable>
index 4d96e4b..990419e 100644 (file)
           </para>
         </td>
         <td>
-          <para style="P4">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]</para>
+          <para style="P4">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
+                           [[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]</para>
         </td>
       </tr>
     </blockTable>
             <para style="P4">[[ formatLang(p.amount) ]]</para>
           </td>
           <td>
-            <para style="P5">[[ formatLang(p.total) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]</para>
+            <para style="P5">[[ formatLang(p.total, currency_obj = o.company_id and o.company_id.currency_id)]]</para>
           </td>
         </tr>
       </blockTable>
index fe6a10d..4ace0ad 100644 (file)
           </para>
         </td>
         <td>
-          <para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]</para>
+          <para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
+                           [[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]</para>
         </td>
       </tr>
     </blockTable>
             <para style="P17"><font face="Helvetica" color="white">[[ '..'*h['level'] ]]</font>[[ h['rule_category'] ]]<font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]</font></para>
           </td>
           <td>
-            <para style="P6">[[ formatLang(h['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para>
+            <para style="P6">[[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para>
           </td>
         </tr>
       </blockTable>
             <para style="P5">[[ formatLang(r['amount']) ]]</para>
           </td>
           <td>
-            <para style="P6">[[ formatLang(r['total']) ]] [[ o.company_id and o.company_id.currency_id.symbol or '']]<font face="Helvetica">[[ r.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font')]]</font></para>
+            <para style="P6">[[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]]<font face="Helvetica">[[ r.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font')]]</font></para>
           </td>
         </tr>
       </blockTable>
index 184f9a0..94df47f 100644 (file)
@@ -36,7 +36,7 @@ class hr_payslip(osv.osv):
 
     _columns = {
         'period_id': fields.many2one('account.period', 'Force Period',states={'draft': [('readonly', False)]}, readonly=True, domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
-        'journal_id': fields.many2one('account.journal', 'Expense Journal',states={'draft': [('readonly', False)]}, readonly=True, required=True),
+        'journal_id': fields.many2one('account.journal', 'Salary Journal',states={'draft': [('readonly', False)]}, readonly=True, required=True),
         'move_id': fields.many2one('account.move', 'Accounting Entry', readonly=True),
     }
 
@@ -215,7 +215,7 @@ class hr_payslip_run(osv.osv):
     _inherit = 'hr.payslip.run'
     _description = 'Payslip Run'
     _columns = {
-        'journal_id': fields.many2one('account.journal', 'Expense Journal', states={'draft': [('readonly', False)]}, readonly=True, required=True),
+        'journal_id': fields.many2one('account.journal', 'Salary Journal', states={'draft': [('readonly', False)]}, readonly=True, required=True),
     }
 
     def _get_default_journal(self, cr, uid, context=None):
index ccfcae0..56c5176 100644 (file)
@@ -297,7 +297,6 @@ class hr_applicant(base_stage, osv.Model):
         res['context'] = {
             'default_partner_ids': applicant.partner_id and [applicant.partner_id.id] or False,
             'default_user_id': uid,
-            'default_state': 'open',
             'default_name': applicant.name,
             'default_categ_ids': category and [category.id] or False,
         }
index d48086f..d6d04c1 100644 (file)
                             </div>
                             <div class="oe_kanban_content" tooltip="kanban-tooltip">
                                 <div>
-                                    <b><field name="name"/></b><br/>
+                                    <t t-if="record.partner_name.raw_value"><b><field name="partner_name"/></b><br/></t>
+                                    <i><field name="name"/></i><br/>
                                     <field name="job_id"/><br/>
                                     <t t-if="record.partner_mobile.raw_value">Mobile: <field name="partner_mobile"/><br/></t>
                                     <t t-if="record.title_action.raw_value"><field name="title_action"/><br/></t>
                         attrs="{'invisible':[('survey_id','=',False)]}"/>
                 </div>
             </field>
-            <xpath expr="/form/sheet/h1" version="7.0" position="after">
-                <div colspan="4" attrs="{'invisible': [('alias_domain', '=', False)]}">
+            <xpath expr="//div[@class='oe_title']" version="7.0" position="after">
+                <div attrs="{'invisible': [('alias_domain', '=', False)]}">
                     <field name="alias_id" invisible="1" required="0"/>
                     <label for="alias_name" class="oe_edit_only"/>
                     <field name="alias_name" nolabel="1" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" nolabel="1" class="oe_inline"/>
index 1b0b8bf..b33b2ea 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">hr.recruitment.report.tree</field>
         <field name="model">hr.recruitment.report</field>
         <field name="arch" type="xml">
-            <tree string="Recruitment Analysis">
+            <tree string="Recruitment Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="job_id"/>
index b9574b5..ab76f2b 100644 (file)
@@ -135,6 +135,8 @@ class account_analytic_line(osv.osv):
     def _default_general_account(self, cr, uid, context=None):
         proxy = self.pool.get('hr.employee')
         record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
+        if not record_ids:
+            raise osv.except_osv(_('Error!'), _('Please create an employee associated to this user.'))
         employee = proxy.browse(cr, uid, record_ids[0], context=context)
         if employee.product_id and employee.product_id.property_account_income:
             return employee.product_id.property_account_income.id
index 66e115f..676e28f 100644 (file)
@@ -7,14 +7,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 6.0dev\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-05-10 18:04+0000\n"
-"Last-Translator: Ferdinand-camptocamp <Unknown>\n"
+"PO-Revision-Date: 2012-10-12 23:22+0000\n"
+"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:20+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-14 04:39+0000\n"
+"X-Generator: Launchpad (build 16137)\n"
 
 #. module: hr_timesheet_invoice
 #: view:report.timesheet.line:0
@@ -769,7 +769,7 @@ msgstr "Menge"
 #. module: hr_timesheet_invoice
 #: report:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
 msgid "Date/Code"
-msgstr "Datum/Kurzbez."
+msgstr "Dat/Kurzb."
 
 #. module: hr_timesheet_invoice
 #: field:report.timesheet.line,general_account_id:0
index 37c40f6..50a9967 100644 (file)
@@ -15,7 +15,7 @@
             <field name="name">hr.timesheet.report.tree</field>
             <field name="model">hr.timesheet.report</field>
             <field name="arch" type="xml">
-                <tree string="Timesheet Analysis">
+                <tree string="Timesheet Analysis" create="false">
                     <field name="year" invisible="1"/>
                     <field name="month" invisible="1"/>
                     <field name="date" invisible="1"/>
index 3bd4950..2af8792 100644 (file)
@@ -35,7 +35,7 @@ class hr_timesheet_current_open(osv.osv_memory):
 
         user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
         if not len(user_ids):
-            raise osv.except_osv(_('Error!'), _('Please define employee for your user!'))
+            raise osv.except_osv(_('Error!'), _('Please create an employee and associate it with this user.'))
         ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
 
         if len(ids) > 1:
index 415f3a0..ff1a2c2 100644 (file)
             <para style="terp_default_9">[[ l['code'] (l['intra_code']) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ l['amount'] or O.OO ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(l['amount'], currency_obj=company.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_tblheader_General_Right">Total:</para>
         </td>
         <td>
-          <para style="terp_tblheader_General_Right">[[ data['form']['amountsum'] or 0.00 ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_General_Right">[[ formatLang(data['form']['amountsum'], currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 5221b00..76c6eb9 100644 (file)
             <tr>
               <td>
                 <para style="terp_default_Bold_8">[[o.employee_id.name or '_']]</para>
-                <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.street or '_' ]]</para>
-                <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.street2 or '' ]]</para>
-                <para style="terp_default_Bold_8">[[o.employee_id.address_home_id.zip or '_' ]] [[o.employee_id.address_home_id.city or '' ]]</para>
+                <para style="terp_default_Bold_8">[[display_address(o.employee_id.address_home_id) or '_' ]]</para>
               </td>
             </tr>
           </blockTable>
index 4d7dbe9..38f1272 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">payment.advice.report.tree</field>
         <field name="model">payment.advice.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " string="Advices Analysis">
+            <tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " create="false" string="Advices Analysis">
                 <field name="nbr" sum="# Payment Lines"/>
                 <field name="name" invisible="1"/>
                 <field name="employee_id" invisible="1"/>
index 92eaf3e..d71cb28 100644 (file)
@@ -6,7 +6,7 @@
         <field name="name">payslip.report.tree</field>
         <field name="model">payslip.report</field>
         <field name="arch" type="xml">
-            <tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " string="Payslip Analysis">
+            <tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " create="false" string="Payslip Analysis">
                 <field name="nbr" sum="# Payslip Lines"/>
                 <field name="name"/>
                 <field name="employee_id" invisible="1"/>
index 8f2a57d..6368a64 100644 (file)
               </para>
             </td>
             <td>
-              <para style="terp_default_Right_9_Bold">[[ formatLang(e[13]) ]] [[company.currency_id.symbol]]</para>
+              <para style="terp_default_Right_9_Bold">[[ formatLang(e[13],currency_obj= company.currency_id)]] </para>
             </td>
           </tr>
         </blockTable>
             <para style="terp_tblheader_Details">Total</para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[1]) or removeParentNode('para') ]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[1],currency_obj= company.currency_id) or removeParentNode('para') ]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[2]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[2],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[3]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[3],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[4]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[4],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[5]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[5],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[6]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[6],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[7]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[7],currency_obj= company.currency_id) or removeParentNode('para')]] ]</para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[8]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[8],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[9]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[9],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[10]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[10],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[11]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[11],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(t[12]) or removeParentNode('para')]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(t[12],currency_obj= company.currency_id) or removeParentNode('para')]] </para>
           </td>
           <td>
-            <para style="terp_tblheader_General_Right">[[ formatLang(get_total()) ]] [[company.currency_id.symbol]]</para>
+            <para style="terp_tblheader_General_Right">[[ formatLang(get_total(), currency_obj = company.currency_id)]]</para>
           </td>
         </tr>
       </blockTable>
index 7fa127b..502eaa7 100644 (file)
                 </para>
               </td>
               <td>
-                <para style="terp_default_Right_9_Bold">[[ formatLang(e1[13]) ]] [[ company.currency_id.symbol ]]</para>
+                <para style="terp_default_Right_9_Bold">[[ formatLang(e1[13],currency_obj= company.currency_id) ]] </para>
               </td>
             </tr>
           </blockTable>
                 </para>
               </td>
               <td>
-                <para style="terp_default_Right_9_Bold">[[ formatLang(e2[13]) ]] [[ company.currency_id.symbol ]]</para>
+                <para style="terp_default_Right_9_Bold">[[ formatLang(e2[13],currency_obj= company.currency_id) ]] </para>
               </td>
             </tr>
           </blockTable>
index 8ca1bae..879314a 100644 (file)
             <para style="P5">[[ line['acc_no'] ]]</para>
           </td>
           <td>
-            <para style="P8">[[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para>
+            <para style="P8">[[formatLang(line['bysal'], currency_obj = company.currency_id) ]]</para>
           </td>
           <td>
             <para style="P5">[[ line['debit_credit'] ]]</para>
             <para style="P5">[[ line['ifsc_code'] ]]</para>
           </td>
           <td>
-            <para style="P8">[[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para>
+            <para style="P8">[[formatLang(line['bysal'], currency_obj = company.currency_id) ]]</para>
           </td>
           <td>
             <para style="P5">[[ line['debit_credit'] ]]</para>
           <para style="P4"/>
         </td>
         <td>
-          <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para>
+          <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]]</para>
         </td>
         <td>
           <para style="P4">
           <para style="P4"/>
         </td>
         <td>
-          <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]</para>
+          <para style="P4"><font face="Helvetica" size="6.0">[[ o.line_ids==[] and removeParentNode('para') ]]</font>[[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]]</para>
         </td>
         <td>
           <para style="P4">
index a7ab3db..c4ce55b 100644 (file)
           </para>
         </td>
         <td>
-          <para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]</para>
+          <para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]</para>
         </td>
       </tr>
     </blockTable>
             <para style="P17"><font face="Helvetica" color="white">[[ '..'*h['level'] ]]</font>[[ h['rule_category'] ]]<font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]</font></para>
           </td>
           <td>
-            <para style="P6">[[ formatLang(h['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para>
+            <para style="P6">[[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para>
           </td>
         </tr>
       </blockTable>
index b09b59b..0a13beb 100644 (file)
             </para>
           </td>
           <td>
-            <para style="terp_default_9_right_bold"><u>[[ formatLang(get_total(o,objects)) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]</u></para>
+            <para style="terp_default_9_right_bold"><u>[[ formatLang(get_total(o,objects), currency_obj = o.company_id and o.company_id.currency_id) ]]</u></para>
           </td>
         </tr>
       </blockTable>
               <para style="terp_default_9">[[ lines.descript]]</para>
             </td>
             <td>
-              <para style="terp_default_9_right">[[ lines.price ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]</para>
+              <para style="terp_default_9_right">[[ formatLang(lines.price , currency_obj = o.company_id and o.company_id.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
           <para style="terp_tbl_detail_header">Total :</para>
         </td>
         <td>
-          <para style="terp_default_9_right_bold">[[ formatLang(get_nettotal()) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]</para>
+          <para style="terp_default_9_right_bold">[[ formatLang(get_nettotal(), currency_obj = o.company_id and o.company_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 7e77b2f..9631918 100644 (file)
@@ -134,6 +134,7 @@ class mail_message(osv.Model):
         'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
         'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes',
             help='Users that voted for this message'),
+        'is_private': fields.boolean('Private message'),
     }
 
     def _needaction_domain_get(self, cr, uid, context=None):
@@ -150,6 +151,7 @@ class mail_message(osv.Model):
         'date': lambda *a: fields.datetime.now(),
         'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
         'body': '',
+        'is_private': True,
     }
 
     #------------------------------------------------------
@@ -220,70 +222,67 @@ class mail_message(osv.Model):
             'unread': msg.unread and msg.unread['unread'] or False
         }
 
-    def message_read_tree_get_expandable(self, cr, uid, parent_message, last_message, domain=[], current_level=0, level=0, context=None):
-        """ . """
-        base_domain = [('id', '<', last_message['id'])]
-        if parent_message and current_level < level:
-            base_domain += [('parent_id', '=', parent_message['id'])]
-        elif parent_message:
-            base_domain += [('id', 'child_of', parent_message['id']), ('id', '!=', parent_message['id'])]
-        if domain:
-            base_domain += domain
-        extension = {   'type': 'expandable',
-                        'domain': base_domain,
-                        'thread_level': current_level,
-                        'context': context,
-                        'id': -1,
-                        }
-        return extension
-
-    def message_read_tree_flatten(self, cr, uid, parent_message, messages, domain=[], level=0, current_level=0, context=None, limit=None, add_expandable=True):
-        """ Given a tree with several roots of following structure :
-            [   {'id': 1, 'child_ids': [
-                    {'id': 11, 'child_ids': [...] },],
-                {...}   ]
-            Flatten it to have a maximum number of levels, 0 being flat and
-            sort messages in a level according to a key of the messages.
-            Perform the flattening at leafs if above the maximum depth, then get
-            back in the tree.
-            :param context: ``sort_key``: key for sorting (id by default)
-            :param context: ``sort_reverse``: reverser order for sorting (True by default)
+    def _message_read_expandable(self, cr, uid, tree, result, message_loaded, domain, context, parent_id, limit):
+        """
+        create the expandable message for all parent message read
+        this function is used by message_read
         """
-        def _flatten(msg_dict):
-            """ from    {'id': x, 'child_ids': [{child1}, {child2}]}
-                get     [{'id': x, 'child_ids': []}, {child1}, {child2}]
-            """
-            child_ids = msg_dict.pop('child_ids', [])
-            msg_dict['child_ids'] = []
-            return [msg_dict] + child_ids
 
-        context = context or {}
-        limit = limit or self._message_read_limit
+        tree_not = []   
+        # expandable for not show message
+        for id_msg in tree:
+            # get all childs
+            not_loaded_ids = self.search(cr, SUPERUSER_ID, [['parent_id','=',id_msg],['id','not in',message_loaded]], None, limit=1000)
+            # group childs not read
+            id_min=None
+            id_max=None
+            nb=0
+            for not_loaded_id in not_loaded_ids:
+                if not_loaded_id not in tree:
+                    nb+=1
+                    if id_min==None or id_min>not_loaded_id:
+                        id_min=not_loaded_id
+                    if id_max==None or id_max<not_loaded_id:
+                        id_max=not_loaded_id
+                    tree_not.append(not_loaded_id)
+                else:
+                    if nb>0:
+                        result.append({
+                            'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
+                            'nb_messages': nb,
+                            'type': 'expandable', 
+                            'parent_id': id_msg,
+                            'id':  id_min
+                        })
+                    id_min=None
+                    id_max=None
+                    nb=0
+            if nb>0:
+                result.append({
+                    'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
+                    'nb_messages': nb,
+                    'type': 'expandable', 
+                    'parent_id': id_msg, 
+                    'id':  id_min
+                })
 
-        # Depth-first flattening
-        for message in messages:
-            if message.get('type') == 'expandable':
-                continue
-            message['child_ids'] = self.message_read_tree_flatten(cr, uid, message, message['child_ids'], domain, level, current_level + 1, context=context, limit=limit)
-            for child in message['child_ids']:
-                if child.get('type') == 'expandable':
-                    continue
-                message['child_nbr'] += child['child_nbr']
-        # Flatten if above maximum depth
-        if current_level < level:
-            return_list = messages
-        else:
-            return_list = [flat_message for message in messages for flat_message in _flatten(message)]
-
-        # Add expandable
-        return_list = sorted(return_list, key=itemgetter(context.get('sort_key', 'id')), reverse=context.get('sort_reverse', True))
-        if return_list and current_level == 0 and add_expandable:
-            expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
-            return_list.append(expandable)
-        elif return_list and current_level <= level and add_expandable:
-            expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
-            return_list.append(expandable)
-        return return_list
+
+        # expandable for limit max
+        ids = self.search(cr, SUPERUSER_ID, domain+[['id','not in',message_loaded+tree+tree_not]], context=context, limit=1)
+        if len(ids) > 0:
+            result.append(
+            {
+                'domain': domain,
+                'nb_messages': 0,
+                'type': 'expandable', 
+                'parent_id': parent_id, 
+                'id': -1
+            });
+
+
+        result = sorted(result, key=lambda k: k['id'])
+
+        return result
 
     def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
         """ Read messages from mail.message, and get back a structured tree
@@ -293,13 +292,11 @@ class mail_message(osv.Model):
             well formed threads.
 
             :param domain: optional domain for searching ids
-            :param level: level of threads to display, 0 being flat
             :param limit: number of messages to fetch
             :param parent_id: if parent_id reached, stop searching for
                 further parents
             :return list: list of trees of messages
         """
-
         message_loaded = context and context.get('message_loaded') or [0]
 
         # don't read the message display by .js, in context message_loaded list
@@ -314,7 +311,7 @@ class mail_message(osv.Model):
         record = None
 
         # select ids
-        if ids:
+        if ids and ids!=[None]:
             for msg in self.browse(cr, uid, ids, context=context):
                 result.append(self._message_dict_get(cr, uid, msg, context=context))
             return result
@@ -340,60 +337,19 @@ class mail_message(osv.Model):
 
         result = sorted(result, key=lambda k: k['id'])
 
+        result = self._message_read_expandable(cr, uid, tree, result, message_loaded, domain, context, parent_id, limit)
 
-        tree_not = []   
-        # expandable for not show message
-        for id_msg in tree:
-            # get all childs
-            not_loaded_ids = self.search(cr, SUPERUSER_ID, [['parent_id','=',id_msg],['id','not in',message_loaded]], None, limit=1000)
-            # group childs not read
-            id_min=None
-            id_max=None
-            nb=0
-            for not_loaded_id in not_loaded_ids:
-                if not_loaded_id not in tree:
-                    nb+=1
-                    if id_min==None or id_min>not_loaded_id:
-                        id_min=not_loaded_id
-                    if id_max==None or id_max<not_loaded_id:
-                        id_max=not_loaded_id
-                    tree_not.append(not_loaded_id)
-                else:
-                    if nb>0:
-                        result.append({
-                            'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
-                            'nb_messages': nb,
-                            'type': 'expandable', 
-                            'parent_id': id_msg,
-                            'id':  id_min
-                        })
-                    nb=0
-            if nb>0:
-                result.append({
-                    'domain': [['id','>=',id_min],['parent_id','=',id_msg]],
-                    'nb_messages': nb,
-                    'type': 'expandable', 
-                    'parent_id': id_msg, 
-                    'id':  id_min
-                })
-
-
-        # expandable for limit max
-        ids = self.search(cr, SUPERUSER_ID, domain+[['id','not in',message_loaded+tree+tree_not]], context=context, limit=1)
-        if len(ids) > 0:
-            result.append(
-            {
-                'domain': domain,
-                'nb_messages': 0,
-                'type': 'expandable', 
-                'parent_id': parent_id, 
-                'id': -1
-            });
+        return result
 
+    def user_free_attachment(self, cr, uid, context=None):
+        attachment_list = []
 
-        result = sorted(result, key=lambda k: k['id'])
+        attachment = self.pool.get('ir.attachment')
+        attachment_ids = attachment.search(cr, uid, [('res_model','=',''),('create_uid','=',uid)])
+        if len(attachment_ids):
+            attachment_list = [{'id': attach.id, 'name': attach.name, 'date': attach.create_date} for attach in attachment.browse(cr, uid, attachment_ids, context=context)]
 
-        return result
+        return attachment_list
 
     #------------------------------------------------------
     # Email api
@@ -525,11 +481,9 @@ class mail_message(osv.Model):
             self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
         return super(mail_message, self).unlink(cr, uid, ids, context=context)
 
-    def _notify(self, cr, uid, newid, context=None):
+    def _notify_followers(self, cr, uid, newid, message, context=None):
         """ Add the related record followers to the destination partner_ids.
-            Call mail_notification.notify to manage the email sending
         """
-        message = self.browse(cr, uid, newid, context=context)
         partners_to_notify = set([])
         # message has no subtype_id: pure log message -> no partners, no one notified
         if not message.subtype_id:
@@ -550,6 +504,14 @@ class mail_message(osv.Model):
                 self.write(cr, SUPERUSER_ID, [newid], {'partner_ids': [(4, p_id) for p_id in missing_notified]}, context=context)
             partners_to_notify |= extra_notified
 
+    def _notify(self, cr, uid, newid, context=None):
+        """ Add the related record followers to the destination partner_ids if is not a private message.
+            Call mail_notification.notify to manage the email sending
+        """
+        message = self.browse(cr, uid, newid, context=context)
+        if message and (message.is_private!=False and message.is_private!=None):
+            self._notify_followers(cr, uid, newid, message, context=context)
+        
         # add myself if I wrote on my wall, 
         # unless remove myself author
         if ((message.model=="res.partner" and message.res_id==message.author_id.id)):
index cc04193..0c57238 100644 (file)
             <field name="name">Inbox</field>
             <field name="tag">mail.wall</field>
             <field name="params" eval="&quot;{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', True)],
-                'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
+                'context': {'default_model': 'res.partner'} }&quot;"/>
         </record>
 
         <record id="action_mail_archives_feeds" model="ir.actions.client">
             <field name="name">Archives</field>
             <field name="tag">mail.wall</field>
             <field name="params" eval="&quot;{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', False)],
-                'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
+                'context': {'default_model': 'res.partner'} }&quot;"/>
         </record>
 
         <record id="action_mail_sent_feeds" model="ir.actions.client">
             <field name="name">Sent</field>
             <field name="tag">mail.wall</field>
             <field name="params" eval="&quot;{'domain': [('author_id.user_ids', 'in', [uid])],
-                'context': {'default_model': 'res.users', 'default_res_id': uid} }&quot;"/>
+                'context': {'default_model': 'res.partner'} }&quot;"/>
         </record>
     </data>
 </openerp>
index e615064..e5b93ac 100644 (file)
@@ -623,11 +623,10 @@ class mail_thread(osv.AbstractModel):
             :param str subject: optional subject
             :param str type: mail_message.type
             :param int parent_id: optional ID of parent message in this thread
-            :param tuple(str,str) attachments: list of attachment tuples in the form
+            :param tuple(str,str) attachments or list id: list of attachment tuples in the form
                 ``(name,content)``, where content is NOT base64 encoded
             :return: ID of newly created mail.message
         """
-
         context = context or {}
         attachments = attachments or []
         assert (not thread_id) or isinstance(thread_id, (int, long)) or \
@@ -635,7 +634,7 @@ class mail_thread(osv.AbstractModel):
         if isinstance(thread_id, (list, tuple)):
             thread_id = thread_id and thread_id[0]
 
-        attachment_ids = []
+        attachment_ids=[]
         for name, content in attachments:
             if isinstance(content, unicode):
                 content = content.encode('utf-8')
@@ -679,6 +678,13 @@ class mail_thread(osv.AbstractModel):
             'attachment_ids': attachment_ids,
             'subtype_id': subtype_id,
         })
+
+        # if the parent is private, the message must be private
+        if parent_id:
+            msg = messages.browse(cr, uid, parent_id, context=context)
+            if msg.is_private:
+                values["is_private"] = msg.is_private
+
         # Avoid warnings about non-existing fields
         for x in ('from', 'to', 'cc'):
             values.pop(x, None)
@@ -691,10 +697,23 @@ class mail_thread(osv.AbstractModel):
 
     def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
                         subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
+        # if the user write on his wall
+        if self._name=='res.partner' and not thread_id:
+            user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+            thread_id = user.partner_id.id
+
         added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
-                        subtype=subtype, parent_id=parent_id, attachments=attachments, context=context)
+                        subtype=subtype, parent_id=parent_id, context=context)
+
+        attachment_ids=[]
+        if attachments:
+            ir_attachment = self.pool.get('ir.attachment')
+            attachment_ids = ir_attachment.search(cr, 1, [('res_model', '=', ""), ('res_id', '=', ""), ('user_id', '=', uid), ('id', 'in', attachments)], context=context)
+            if attachment_ids:
+                self.pool.get('ir.attachment').write(cr, 1, attachment_ids, { 'res_model': self._name, 'res_id': thread_id }, context=context)
+                self.pool.get('mail.message').write(cr, 1, [added_message_id], {'attachment_ids': [(6, 0, [pid for pid in attachment_ids])]} )
+          
         added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
-
         return added_message
 
     def get_message_subtypes(self, cr, uid, ids, context=None):
index 3507e7c..696edde 100644 (file)
         </record>
         <record id="mail_archivesfeeds" model="ir.ui.menu">
           <field name="name">Archives</field>
-          <field name="sequence" eval="11"/>
+          <field name="sequence" eval="12"/>
           <field name="action" ref="action_mail_archives_feeds"/>
           <field name="parent_id" ref="mail_feeds"/>
         </record>
         <record id="mail_sentfeeds" model="ir.ui.menu">
           <field name="name">Sent</field>
-          <field name="sequence" eval="12"/>
+          <field name="sequence" eval="13"/>
           <field name="action" ref="action_mail_sent_feeds"/>
           <field name="parent_id" ref="mail_feeds"/>
         </record>
index 364ac7e..1592d79 100644 (file)
     overflow: auto;
 }
 
+.openerp .oe_mail_record_wall {
+    margin: auto;
+    width: 560px;
+}
+
 .openerp .oe_mail_record_wall > .oe_mail_wall_threads {
     float: left;
-    width: 560px;
 }
 
 .openerp div.oe_mail_recthread_aside {
     z-index: 5;
 }
 .openerp .oe_mouse_subtypes .oe_recthread_subtypes {
+    background: #fff;
+    padding: 2px;
+    border: 1px solid #aaaaaa;
+    border-top: 0px;
     position: absolute;
     z-index: 2;
 }
 /* ------------------------------------------------------------ */
 
 .openerp div.oe_mail_thread_action {
-    display: none;
     white-space: normal;
     padding: 8px;
     z-index:5;
 }
 
 /* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
-.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea,
-.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea {
-    width: 474px;
-    height: 60px;
-    padding: 4px;
-    font-size: 12px;
-    border: 1px solid #cccccc;
-}
-
-/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
 .openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea:focus,
 .openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea:focus {
     outline: 0;
     margin-left: 66px;
 }
 
+.openerp li.oe_mail_thread_msg {
+    width: 560px;
+}
+
 .openerp div.oe_thread_placeholder li.oe_mail_thread_msg:last-child {
     margin-bottom: 8px;
 }
 
 .openerp li.oe_mail_thread_msg.oe_mail_read,
 .openerp li.oe_mail_thread_msg.oe_mail_read div {
-    background-color: #F0F0F0;
+    border-left: #F0F0F0;
 }
 .openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread,
 .openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread div {
     background-color: #F6F6F6;
 }
 
+.openerp li.oe_mail_thread_msg.oe_mail_unread>div>ul>li.oe_unread,
+.openerp li.oe_mail_thread_msg.oe_mail_read>div>ul>li.oe_read {
+    display: none;
+}
+
 .openerp li.oe_mail_thread_msg > div:after {
     content: "";
     display: block;
 .openerp .oe_mail_msg_email {
     padding: 8px;
     background: white;
-    border-top: 1px solid #ebebeb;
+    position: relative;
 }
 
 .openerp .oe_mail_msg_notification:after, 
 }
 
 .openerp div.oe_mail_msg_content {
-    float: right;
+    float: left;
     position: relative;
     width: 486px;
 }
 }
 
 /* ------------------------------------------------------------ */
-/* mail.compose.message form view & OpenERP hacks
-/* ------------------------------------------------------------ */
-
-/* form_view: delete white background */
-.openerp .oe_mail_msg_content div.oe_formview {
-    background-color: transparent;
-}
-
-.openerp .oe_mail_msg_content div.oe_form_nosheet {
-    margin: 0px;
-}
-
-.openerp .oe_mail_msg_content table.oe_form_group {
-    margin: 0px;
-}
-
-.openerp .oe_mail_msg_content table.oe_form_field,
-.openerp .oe_mail_msg_content div.oe_form_field {
-    padding: 0px;
-}
-
-.openerp .oe_mail_msg_content td.oe_form_group_cell {
-    vertical-align: bottom;
-}
-
-/* subject: change width */
-.openerp .oe_mail_msg_content .oe_form .oe_form_field input {
-    width: 472px;
-}
-
-/* body_html: cleditor */
-.openerp .oe_mail_msg_content div.cleditorMain {
-    border: 1px solid #cccccc;
-}
-
-/* destination_partner_ids */
-.openerp .oe_mail_msg_content div.text-core {
-    height: 22px !important;
-    width: 472px;
-}
-
-/* buttons */
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons button.oe_form_button {
-    padding: 1px;
-}
-
-/* attachment button: override of openerp values */
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file {
-    display: inline-block;
-    width: 24px;
-    height: 24px;
-    margin: 2px;
-}
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file button {
-    margin: 0px;
-}
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons input.oe_form_binary_file {
-    bottom: 0px;
-    top: auto;
-    left: auto;
-    right: 28px;
-    height: 26px;
-    width: 26px;
-    min-width: 22px;
-    font-size: 0px;
-    margin: 0px;
-    padding: 0px;
-}
-
-/* ------------------------------------------------------------ */
 /* Messages layout
 /* ------------------------------------------------------------ */
 
 }
 
 /* Dropdown menu */
-/*.openerp .oe_mail_msg_content .oe_dropdown_toggle {
-    position: absolute;
-    top: 0px;
-    right: 3px;
-}*/
 
-.openerp .oe_mail .oe_semantic_html_override {
+.openerp .oe_mail ul.oe_mail_thread_display ul.oe_mail_thread_display {
     position: relative;
+    border-left: 1px #DDD dashed;
 }
 
 .openerp .oe_mail ul.oe_header {
     position: absolute;
     right: 3px;
     top: -6px;
-    display: none;
     z-index: 10;
-    height: 18px;
 }
 
 .openerp .oe_mail ul.oe_header a {
     text-decoration: none;
 }
 
-.openerp .oe_mail .oe_semantic_html_override:hover > ul.oe_header {
-    display: block;
-}
-
 .openerp .oe_mail ul.oe_header>li {
     display: inline-block;
-}
-
-.openerp .oe_mail_msg_content .oe_dropdown_arrow:after {
-    border-top: 4px solid #404040;
+    height: 20px;
+    text-align: right;
 }
 
 /* Message footer */
 
 /* Attachments list */
 .openerp .oe_mail_msg_content ul.oe_mail_msg_attachments {
-    display: none;
     width: 100%;
-    border-top: 1px solid #CCC;
     margin: .5em 0 0 0;
     padding: .5em 0;
     list-style-position: inside;
 }
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments.oe_hidden {
+    display: none;
+}
 .openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li {
     float: none;
+    height: 20px;
+    line-height: 20px;
     margin: 0;
     padding: 0;
     list-style-type: square;
 }
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process {
+    float: right;
+    width: 200px;
+    height: 16px;
+}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process div {
+    float: left;
+    width: 38px;
+    height: 16px;
+    margin-right: 2px;
+    background: #66FF66;
+}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process span {
+    color: #aaaaaa;
+    position: absolute;
+}
+
index ba7ed36..e2f136e 100644 (file)
 /* ------------------------------ */
-/* Compose Message Wizard Form */
+/* Compose Message */
 /* ------------------------------ */
 
-.openerp .oe_mail_compose_message_icons {
-    text-align: right;
+.openerp .oe_mail_msg_content .oe_mail_compose_message_footer {
+    height: 24px;
 }
 
-.openerp .oe_mail_compose_message_icons img {
-    width: 20px;
-    height: 20px;
+.openerp .oe_mail_msg_content .oe_mail_compose_message_footer button.oe_mail_compose_message_button_send {
+    float: left;
 }
+
+.openerp .oe_mail .oe_mail_compose_textarea
+{
+   display: none;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_header,
+.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_footer,
+{
+    position: relative;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel {
+    position: absolute;
+    right: -8px;
+    top: -8px;
+}
+.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel:first-of-type {
+    display:none;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea button.oe_full {
+    float: right;
+    position: relative;
+    right: -10px;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message : list_recipients
+/* ------------------------------------------------------------ */
+
+.openerp .oe_mail .oe_mail_list_recipients {
+    display: inline;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_all_follower {
+    color: blue;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_partner_follower a {
+    color: red;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_hidden,
+.openerp .oe_mail .oe_mail_list_recipients .oe_more_hidden {
+    display: none;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message : attachment
+/* ------------------------------------------------------------ */
+
+.openerp .oe_mail .oe_attachment_file  {
+    display: inline-block;
+}
+
+.openerp .oe_mail .oe_attachment_file .oe_add  {
+    float: left;
+    width: 24px;
+    height: 24px;
+    position: relative;
+    z-index: 10;
+    left: +2px;
+    top: +7px;
+    overflow: hidden;
+}
+
+/* attachment button: override of openerp values */
+.openerp .oe_mail .oe_attachment_file .oe_add button,
+.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
+    position: absolute;
+    bottom: +0px;
+    left: +0px;
+    height: 24px;
+    width: 24px;
+    margin: 0px;
+    padding: 0px;
+}
+.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
+    z-index:2;
+    width: 300px;
+    left: -100px;
+    background: transparent;
+    border: 0;
+    color: transparent;
+}
+.openerp .oe_mail .oe_attachment_file .oe_add button span {
+    position: relative;
+    bottom: +4px;
+    font-size: 30px;
+}
+
+.openerp .oe_mail .oe_mail_msg_attachments input {
+    visibility: hidden;
+}
+
+.openerp .oe_mail .oe_mail_compose_attachment_list {
+    clear: both;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message
+/* ------------------------------------------------------------ */
+
+
+/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
+.openerp .oe_mail.oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text,
+.openerp .oe_mail div.oe_mail_compose_message_body textarea.field_text {
+    width: 100%;
+    min-height: 120px;
+    height: auto;
+    padding: 4px;
+    font-size: 12px;
+    border: 1px solid #cccccc;
+}
+
+/* not top textarea */
+.openerp .oe_mail.oe_semantic_html_override .oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text {
+    height: 60px;
+}
+
+/* form_view: delete white background */
+.openerp .oe_mail_msg_content div.oe_formview {
+    background-color: transparent;
+}
+
+.openerp .oe_mail_msg_content div.oe_form_nosheet {
+    margin: 0px;
+}
+
+.openerp .oe_mail_msg_content table.oe_form_group {
+    margin: 0px;
+}
+
+.openerp .oe_mail_msg_content table.oe_form_field,
+.openerp .oe_mail_msg_content div.oe_form_field {
+    padding: 0px;
+}
+
+.openerp .oe_mail_msg_content td.oe_form_group_cell {
+    vertical-align: bottom;
+}
+
+/* subject: change width */
+.openerp .oe_mail_msg_content .oe_form .oe_form_field input[type='text'] {
+    width: 472px;
+}
+
+/* body_html: cleditor */
+.openerp .oe_mail_msg_content div.cleditorMain {
+    border: 1px solid #cccccc;
+}
+
+/* destination_partner_ids */
+.openerp .oe_mail_msg_content div.text-core {
+    height: 22px !important;
+    width: 472px;
+}
\ No newline at end of file
index e0c9ac9..15a81be 100644 (file)
@@ -18,17 +18,33 @@ openerp.mail = function(session) {
 
     session.web.FormView = session.web.FormView.extend({
         do_action: function(action, on_close) {
-            if (action.res_model == 'mail.compose.message' &&
-                action.context && action.context.redirect == true &&
-                this.fields && this.fields.message_ids && this.fields.message_ids.view.get("actual_mode") != 'create') {
-                var thread = this.fields.message_ids.thread;
+            if (action.res_model == 'mail.compose.message') {
+
+                /* hack for stop context propagation of wrong value
+                 * delete this hack when a global method to clean context is create
+                */
+                for(var key in action.context){
+                    if( key!='default_template_id' &&
+                        key!='default_use_template' &&
+                        key!='default_is_private' &&
+                        key!='default_model' &&
+                        key!='default_res_id' &&
+                        key!='default_subtype' &&
+                        key!='active_id' &&
+                        key!='lang' &&
+                        key!='bin_raw' &&
+                        key!='tz' &&
+                        key!='active_model' &&
+                        key!='edi_web_url_view' &&
+                        key!='active_ids')
+                    action.context[key]=null;
+                };
+                /* end hack */
+
+                $('.openerp .oe_mail_wall_threads .oe_mail_thread button.oe_mail_wall_button_fetch').click();
 
-                thread.refresh(action.context);
-                return false;
-            }
-            else {
-                return this._super(action, on_close);
             }
+            return this._super(action, on_close);
         },
     });
 
@@ -73,6 +89,15 @@ openerp.mail = function(session) {
             }
             return string;
         },
+
+        /* replace textarea text into html text
+         * (add <p>, <a>)
+        */
+        get_text2html: function(text){
+            return text
+                .replace(/[\n\r]/g,'<br/>')
+                .replace(/((?:https?|ftp):\/\/[\S]+)/g,'<a href="$1">$1</a> ')
+        }
     };
 
 
@@ -84,160 +109,301 @@ openerp.mail = function(session) {
      * This widget handles the display of a form to compose a new message.
      * This form is a mail.compose.message form_view.
      */
-
-    mail.ComposeMessage = session.web.Widget.extend({
+    
+    mail.ThreadComposeMessage = session.web.Widget.extend({
         template: 'mail.compose_message',
-        
+
         /**
          * @param {Object} parent parent
          * @param {Object} [options]
-         * @param {Object} [options.context] context passed to the
-         *  mail.compose.message DataSetSearch. Please refer to this model
-         *  for more details about fields and default values.
+         *      @param {Object} [context] context passed to the
+         *          mail.compose.message DataSetSearch. Please refer to this model
+         *          for more details about fields and default values.
+         *      @param {Boolean} [show_attachment_delete] 
          */
         init: function (parent, options) {
             var self = this;
             this._super(parent);
             this.attachment_ids = [];
-            // options
-            this.options = options || {};
-            this.options.context = options.context || {};
-            this.options.form_xml_id = options.form_xml_id || 'email_compose_message_wizard_form_chatter';
-            this.options.form_view_id = options.form_view_id || false;
-            this.show_attachment_delete = true;
+
+            this.context = options.context || {};
+
+            this.id =           options.parameters.id;
+            this.model =        options.parameters.model;
+            this.res_id =       options.parameters.res_id;
+            this.is_private =   options.parameters.is_private;
+            this.partner_ids =  options.parameters.partner_ids;
+            this.options={thread:{}};
+            this.options.thread.show_header_compose =  options.parameters.options.thread.show_header_compose;
+            this.options.thread.display_on_flat =  options.parameters.options.thread.display_on_flat;
+
+            this.attachment_ids = [];
+            this.options.thread.show_attachment_delete = true;
+            this.options.thread.show_attachment_link = true;
+
+            this.parent_thread= parent.messages!= undefined ? parent : false;
+
+
+            this.ds_attachment = new session.web.DataSetSearch(this, 'ir.attachment');
+            this.fileupload_id = _.uniqueId('oe_fileupload_temp');
+            $(window).on(self.fileupload_id, self.on_attachment_loaded);
         },
 
-        start: function () {
-            this._super.apply(this, arguments);
-            // customize display: add avatar, clean previous content
+        start: function(){
+            this.display_attachments();
+            this.bind_events();
+
+            //load avatar img
             var user_avatar = mail.ChatterUtils.get_image(this.session, 'res.users', 'image_small', this.session.uid);
             this.$('img.oe_mail_icon').attr('src', user_avatar);
-            this.$('div.oe_mail_msg_content').empty();
-            // create a context for the dataset and default_get of the wizard
-            var context = _.extend({}, this.options.context);
-            this.ds_compose = new session.web.DataSetSearch(this, 'mail.compose.message', context);
-            // find the id of the view to display in the chatter form
-            if (this.options.form_view_id) {
-                return this.create_form_view();
-            }
-            else {
-                var data_ds = new session.web.DataSetSearch(this, 'ir.model.data');
-                return data_ds.call('get_object_reference', ['mail', this.options.form_xml_id]).pipe(this.proxy('create_form_view'));
-            }
         },
 
-        /** Create a FormView, then append it to the to widget DOM. */
-        create_form_view: function (new_form_view_id) {
+        /* upload the file on the server, add in the attachments list and reload display
+         */
+        display_attachments: function(){
             var self = this;
-            this.options.form_view_id = (new_form_view_id && new_form_view_id[1]) || this.options.form_view_id;
-            // destroy previous form_view if any
-            if (this.form_view) { this.form_view.destroy(); }
-            // create the FormView
-            this.form_view = new session.web.FormView(this, this.ds_compose, this.options.form_view_id, {
-                action_buttons: false,
-                pager: false,
-                initial_mode: 'edit',
-                disable_autofocus: true,
-            });
-            // add the form, bind events, activate the form
-            var msg_node = this.$('div.oe_mail_msg_content');
-            return $.when(this.form_view.appendTo(msg_node)).pipe(this.proxy('postprocess_create_form_view'));
-        },
+            var render = $(session.web.qweb.render('mail.thread.message.attachments', {'widget': self}));
+            if(!this.list_attachment){
+                this.$('.oe_mail_compose_attachment_list').replaceWith( render );
+            } else {
+                this.list_attachment.replaceWith( render );
+            }
+            this.list_attachment = this.$("ul.oe_mail_msg_attachments");
 
-        postprocess_create_form_view: function () {
-            // handle attachment button
-            this.fileupload_id = _.uniqueId('oe_fileupload');
-            var button_attach = this.$('button.oe_mail_compose_message_attachment');
-            var rendered = session.web.qweb.render('mail.compose_message.add_attachment', {'widget': this});
-            $(rendered).insertBefore(button_attach);
-            // move the button inside div.oe_hidden_input_file
-            var input_node = this.$('input[name=ufile]');
-            button_attach.detach().insertAfter(input_node);
-            // set the function called when attachments are added
-            this.$('input.oe_form_binary_file').change(this.on_attachment_change);
-            this.bind_events();
-            this.form_view.do_show();
+            // event: delete an attachment
+            this.$el.on('click', '.oe_mail_attachment_delete', self.on_attachment_delete);
         },
-
         on_attachment_change: function (event) {
+            event.stopPropagation();
+            var self = this;
             var $target = $(event.target);
             if ($target.val() !== '') {
-                this.$('form.oe_form_binary_form').submit();
-                session.web.blockUI();
+
+                var filename = $target.val().replace(/.*[\\\/]/,'');
+
+                // if the files exits for this answer, delete the file before upload
+                var attachments=[];
+                for(var i in this.attachment_ids){
+                    if((this.attachment_ids[i].filename || this.attachment_ids[i].name) == filename){
+                        if(this.attachment_ids[i].upload){
+                            return false;
+                        }
+                        this.ds_attachment.unlink([this.attachment_ids[i].id]);
+                    } else {
+                        attachments.push(this.attachment_ids[i]);
+                    }
+                }
+                this.attachment_ids = attachments;
+
+                // submit file
+                //session.web.blockUI();
+                self.$('form.oe_form_binary_form').submit();
+                //self.submit_ajax_attachment();
+
+                this.$(".oe_attachment_file").hide();
+
+                this.attachment_ids.push({
+                    'id': 0,
+                    'name': filename,
+                    'filename': filename,
+                    'url': '',
+                    'upload': true
+                });
+                this.display_attachments();
             }
         },
+        
+        submit_ajax_attachment: function(){
+            var self=this;
+            var $form = self.$('form.oe_form_binary_form');
+            var filename = this.$('input.oe_form_binary_file').val().replace(/.*[\\\/]/,'');
+
+            // create form data
+            var fomdata = new FormData();
+            $.each($form.find('input'), function(i, field) {
+                var $field=$(field);
+                if($field.attr('type')!='file'){
+                    fomdata.append($field.attr('name'), $field.val());
+                } else {
+                    fomdata.append($field.attr('name'), field.files[0]);
+                }
+            });
+
+            var progress=function(event) {
+                self.$("span[name='"+filename+"'] div:lt("+Math.floor(event.loaded / event.total*5)+")").show();
+            };
+
+            $.ajax({
+                url: $form.attr("action"),
+                data: fomdata,
+                cache: false,
+                contentType: false,
+                processData: false,
+                type: 'POST',
+                enctype: 'multipart/form-data',
+                xhr: function() {
+                    // custom xhr
+                    myXhr = $.ajaxSettings.xhr();
+                    if(myXhr.upload){
+                        // for handling the progress of the upload
+                        myXhr.upload.addEventListener('progress', progress, false);
+                    }
+                    myXhr.addEventListener('progress', progress, false);
+                    return myXhr;
+                },
+                success: function(data){
+                    $iframe=$('<iframe style="display:none;"/>').html(data);
+                    $iframe.appendTo(self.$el);
+                    $iframe.remove();
+                }
+            });
+        },
+        
+        on_attachment_loaded: function (event, result) {
+            //session.web.unblockUI();
+            for(var i in this.attachment_ids){
+                if(this.attachment_ids[i].filename == result.filename && this.attachment_ids[i].upload){
+                    this.attachment_ids[i]={
+                        'id': result.id,
+                        'name': result.name,
+                        'filename': result.filename,
+                        'url': mail.ChatterUtils.get_attachment_url(this.session, result)
+                    };
+                }
+            }
+            this.display_attachments();
 
+            var $input = this.$('input.oe_form_binary_file');
+            $input.after($input.clone(true)).remove();
+            this.$(".oe_attachment_file").show();
+        },
+        /* unlink the file on the server and reload display
+         */
         on_attachment_delete: function (event) {
-            if (event.target.dataset && event.target.dataset.id) {
-                var attachment_id = parseInt(event.target.dataset.id);
-                var idx = _.pluck(this.attachment_ids, 'id').indexOf(attachment_id);
-                if (idx == -1) return false;
-                new session.web.DataSetSearch(this, 'ir.attachment').unlink(attachment_id);
-                this.attachment_ids.splice(idx, 1);
+            event.stopPropagation();
+            var attachment_id=$(event.target).data("id");
+            if (attachment_id) {
+                var attachments=[];
+                for(var i in this.attachment_ids){
+                    if(attachment_id!=this.attachment_ids[i].id){
+                        attachments.push(this.attachment_ids[i]);
+                    }
+                    else {
+                        this.ds_attachment.unlink([attachment_id]);
+                    }
+                }
+                this.attachment_ids = attachments;
                 this.display_attachments();
             }
         },
 
-        display_attachments: function () {
-            var attach_node = this.$('div.oe_mail_compose_message_attachments');
-            var rendered = session.web.qweb.render('mail.thread.message.attachments', {'record': this});
-            attach_node.empty();
-            $(rendered).appendTo(attach_node);
-            this.$('.oe_mail_msg_attachments').show();
-            var composer_attachment_ids = _.pluck(this.attachment_ids, 'id');
-            var onchange_like = {'value': {'attachment_ids': composer_attachment_ids}}
-            this.form_view.on_processed_onchange(onchange_like, []);
-        },
-
-        /**
-         * Reinitialize the widget field values to the default values obtained
-         * using default_get on mail.compose.message. This allows to reinitialize
-         * the widget without having to rebuild a complete form view.
-         * @param {Object} new_context: context of the refresh */
-        refresh: function (new_context) {
-            if (! this.form_view) return;
-            var self = this;
-            this.attachments = [];
-            this.options.context = _.extend(this.options.context, new_context || {});
-            this.ds_compose.context = _.extend(this.ds_compose.context, this.options.context);
-            return this.ds_compose.call('default_get', [
-                ['subject', 'body_text', 'body', 'partner_ids', 'composition_mode',
-                    'use_template', 'template_id', 'model', 'res_id', 'parent_id', 'content_subtype'],
-                this.ds_compose.get_context(),
-            ]).then( function (result) {
-                self.form_view.on_processed_onchange({'value': result}, []);
-                self.attachment_ids = [];
+        /* to avoid having unsorted file on the server.
+            we will show the users files of the first message post
+         */
+        set_free_attachments: function(){
+            var self=this;
+            this.parent_thread.ds_message.call('user_free_attachment').then(function(attachments){
+                this.attachment_ids=[];
+                for(var i in attachments){
+                    self.attachment_ids[i]={
+                        'id': attachments[i].id,
+                        'name': attachments[i].name,
+                        'filename': attachments[i].filename,
+                        'url': mail.ChatterUtils.get_attachment_url(self.session, attachments[i])
+                    };
+                }
                 self.display_attachments();
             });
         },
 
-        /**
-         * Bind events in the widget. Each event is slightly described
-         * in the function. */
         bind_events: function() {
             var self = this;
-            // event: add a new attachment
-            $(window).on(this.fileupload_id, function() {
-                var args = [].slice.call(arguments).slice(1);
-                var attachment = args[0];
-                attachment['url'] = mail.ChatterUtils.get_attachment_url(self.session, attachment);
-                self.attachment_ids.push(attachment);
-                self.display_attachments();
-                session.web.unblockUI();
-            });
-            // event: delete an attachment
-            this.$el.on('click', '.oe_mail_attachment_delete', self.on_attachment_delete);
+
+            // set the function called when attachments are added
+            this.$el.on('change', 'input.oe_form_binary_file', self.on_attachment_change );
+            this.$el.on('click', 'a.oe_cancel', self.on_cancel );
+            this.$el.on('click', 'button.oe_post', function(){self.on_message_post()} );
+            this.$el.on('click', 'button.oe_full', function(){self.on_compose_fullmail()} );
         },
-    }),
-    
+
+        on_compose_fullmail: function(){
+            var attachments=[];
+            for(var i in this.attachment_ids){
+                attachments.push(this.attachment_ids[i].id);
+            }
+            var action = {
+                type: 'ir.actions.act_window',
+                res_model: 'mail.compose.message',
+                view_mode: 'form',
+                view_type: 'form',
+                action_from: 'mail.ThreadComposeMessage',
+                views: [[false, 'form']],
+                target: 'new',
+                context: {
+                    'default_res_model': this.context.default_res_model,
+                    'default_res_id': this.context.default_res_id,
+                    'default_content_subtype': 'html',
+                    'default_is_private': true,
+                    'default_parent_id': this.id,
+                    'default_body': mail.ChatterUtils.get_text2html(this.$('textarea').val() || ''),
+                    'default_attachment_ids': attachments
+                },
+            };
+            this.do_action(action);
+        },
+
+        on_cancel: function(){
+            event.stopPropagation();
+            this.$('textarea').val("");
+            this.$('input[data-id]').remove();
+            //this.attachment_ids=[];
+            this.display_attachments();
+            if(!this.options.thread.show_header_compose || !this.options.thread.display_on_flat){
+                this.$el.hide();
+            }
+        },
+
+        /*post a message and fetch the message*/
+        on_message_post: function (body) {
+
+            if (! body) {
+                var comment_node = this.$('textarea');
+                var body = comment_node.val();
+                comment_node.val('');
+            }
+
+            var attachments=[];
+            for(var i in this.attachment_ids){
+                if(this.attachment_ids[i].upload){
+                    session.web.dialog($('<div>' + session.web.qweb.render('CrashManager.warning', {message: 'Please, wait while the file is uploading.'}) + '</div>'));
+                    return false;
+                }
+                attachments.push(this.attachment_ids[i].id);
+            }
+
+            if(body.match(/\S+/)) {
+                this.parent_thread.ds_thread.call('message_post_api', [
+                        this.context.default_res_id, 
+                        mail.ChatterUtils.get_text2html(body), 
+                        false, 
+                        'comment', 
+                        false, 
+                        this.context.default_parent_id, 
+                        attachments]
+                    ).then(this.parent_thread.proxy('switch_new_message'));
+                this.attachment_ids=[];
+                this.on_cancel();
+                return true;
+            }
+        },
+    });
 
     /** 
      * ------------------------------------------------------------
      * Thread Message Expandable Widget
      * ------------------------------------------------------------
      *
-     * This widget handles the display the expandable message in a thread. The
-     * [thread_level] parameter sets the thread level number:
+     * This widget handles the display the expandable message in a thread.
      * - thread
      * - - visible message
      * - - expandable
@@ -256,14 +422,13 @@ openerp.mail = function(session) {
                 default_res_id:  0,
                 default_parent_id: false }, options.context || {});
 
-            this.id =           -1;
+            this.id =           options.parameters.id || -1;
             this.parent_id=     options.parameters.parent_id || false;
             this.nb_messages =  options.parameters.nb_messages || 0;
-            this.type =         options.parameters.type || false;
+            this.type =         'expandable';
 
             // record options and data
             this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0] ;
-
         },
 
         
@@ -285,8 +450,8 @@ openerp.mail = function(session) {
         * @param {object} mouse envent
         */
         on_expandable: function (event) {
-            event.stopPropagation();
-            this.parent_thread.message_fletch(false, this.domain, this.context);
+            if(event)event.stopPropagation();
+            this.parent_thread.message_fetch(false, this.domain, this.context);
             this.destroy();
             return false;
         },
@@ -302,7 +467,7 @@ openerp.mail = function(session) {
      * - record.timerelative: relative time givein by timeago lib
      * - record.avatar: image url
      * - record.attachment_ids[].url: url of each attachmentThe
-     * [thread_level] parameter sets the thread level number:
+     * thread view :
      * - root thread
      * - - sub message (parent_id = root message)
      * - - - sub thread
@@ -322,45 +487,24 @@ openerp.mail = function(session) {
          * @param {Object} [options]
          *      @param {Object} [thread] read obout mail.Thread object
          *      @param {Object} [message]
-         *          @param {Number} [message_ids=null] ids for message_fletch
+         *          @param {Number} [message_ids=null] ids for message_fetch
          *          @param {Number} [message_data=null] already formatted message data, 
          *              for subthreads getting data from their parent
          *          @param {Number} [truncate_limit=250] number of character to
          *              display before having a "show more" link; note that the text
          *              will not be truncated if it does not have 110% of the parameter
          *          @param {Boolean} [show_record_name]
-         *          @param {Boolean} [show_reply]
-         *          @param {Boolean} [show_reply_by_email]
          *          @param {Boolean} [show_dd_delete]
          *          @param {Boolean} [show_dd_hide]
          */
         init: function(parent, options) {
             this._super(parent);
-            this.domain = options.domain || [];
-            this.context = _.extend({
-                default_model: 'mail.thread',
-                default_res_id:  0,
-                default_parent_id: false }, options.context || {});
 
-            // options
-            this.options={
-                'thread' : options.options.thread,
-                'message' : {
-                    'message_ids':            options.options.message.message_ids || null,
-                    'message_data':           options.options.message.message_data || null,
-                    'show_record_name':       options.options.message.show_record_name != undefined ? options.options.message.show_record_name: true,
-                    'show_reply':             options.options.message.show_reply || false,
-                    'show_reply_by_email':    options.options.message.show_reply_by_email || false,
-                    'show_dd_delete':         options.options.message.show_dd_delete || false,
-                    'show_dd_hide':           options.options.message.show_dd_hide || false,
-                    'truncate_limit':         options.options.message.truncate_limit || 250,
-                }
-            };
-            // record options and data
-            this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0] ;
-
-            var param =         options.parameters;
             // record parameters
+            var param =         options.parameters;
+            for(var i in param){
+                this[i] = param[i];
+            }
             this.id =           param.id || -1;
             this.model =        param.model || false;
             this.parent_id=     param.parent_id || false;
@@ -372,7 +516,7 @@ openerp.mail = function(session) {
             this.record_name =  param.record_name || false;
             this.body =         param.body || false;
             this.vote_user_ids =param.vote_user_ids || [];
-            this.has_voted =     param.has_voted || false;
+            this.has_voted =    param.has_voted || false;
 
             this.vote_user_ids = param.vote_user_ids || [];
 
@@ -381,6 +525,28 @@ openerp.mail = function(session) {
             this.author_id =    param.author_id || [];
             this.attachment_ids = param.attachment_ids || [];
 
+            // record domain and context
+            this.domain = options.domain || [];
+            this.context = _.extend({
+                default_model: 'mail.thread',
+                default_res_id:  0,
+                default_parent_id: false }, options.context || {});
+
+            // record options
+            this.options={
+                'thread' : options.options.thread,
+                'message' : {
+                    'message_ids':            options.options.message.message_ids || null,
+                    'message_data':           options.options.message.message_data || null,
+                    'show_record_name':       options.options.message.show_record_name != undefined ? options.options.message.show_record_name: true,
+                    'show_dd_delete':         options.options.message.show_dd_delete || false,
+                    'show_dd_hide':           options.options.message.show_dd_hide || false,
+                    'truncate_limit':         options.options.message.truncate_limit || 250,
+                }
+            };
+
+            // record options and data
+            this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0];
             this.thread = false;
 
             if( param.id > 0 ) {
@@ -420,10 +586,10 @@ openerp.mail = function(session) {
          * in the function. */
         bind_events: function() {
             var self = this;
+
             // event: click on 'Attachment(s)' in msg
-            this.$el.on('click', 'a.oe_mail_msg_view_attachments', function (event) {
-                var act_dom = $(this).parent().parent().parent().find('.oe_mail_msg_attachments');
-                act_dom.toggle();
+            this.$('a.oe_mail_msg_view_attachments:first').on('click', function (event) {
+                self.$('.oe_mail_msg_attachments:first').toggle();
             });
             // event: click on icone 'Read' in header
             this.$el.on('click', 'a.oe_read', this.on_message_read_unread);
@@ -434,21 +600,13 @@ openerp.mail = function(session) {
 
             // event: click on 'Reply' in msg
             this.$el.on('click', 'a.oe_reply', this.on_message_reply);
-            // event: click on 'Reply by email' in msg side menu
-            this.$el.on('click', 'a.oe_reply_by_email', this.on_message_reply_by_mail);
             // event: click on 'Vote' button
             this.$el.on('click', 'button.oe_mail_msg_vote', this.on_vote);
         },
 
         on_message_reply:function(event){
             event.stopPropagation();
-            this.thread.on_compose_message($(event.srcElement).hasClass("oe_full_reply"), false);
-            return false;
-        },
-
-        on_message_reply_by_mail:function(event){
-            event.stopPropagation();
-            this.thread.on_compose_message(true, true);
+            this.thread.on_compose_message();
             return false;
         },
 
@@ -468,6 +626,7 @@ openerp.mail = function(session) {
             if(this.thread){
                 return false;
             }
+            var param = _.extend(self, {'parent_id': self.id});
             /*create thread*/
             self.thread = new mail.Thread(self, {
                     'domain': self.domain,
@@ -480,11 +639,7 @@ openerp.mail = function(session) {
                         'thread' :  self.options.thread,
                         'message' : self.options.message
                     },
-                    'parameters':{
-                        'model': self.model,
-                        'id': self.id,
-                        'parent_id': self.id
-                    }
+                    'parameters': param
                 }
             );
             /*insert thread in parent message*/
@@ -501,9 +656,6 @@ openerp.mail = function(session) {
             } else {
                 self.destroy();
             }
-            for(var i in this.thread.messages){
-                this.thread.messages[i].animated_destroy({fadeTime:0});
-            }
         },
 
         on_message_delete: function (event) {
@@ -523,10 +675,17 @@ openerp.mail = function(session) {
         */
         on_message_read_unread: function (event) {
             event.stopPropagation();
-            this.animated_destroy({fadeTime:250});
+            if($(event.srcElement).hasClass("oe_read")) this.animated_destroy({fadeTime:250});
             // if this message is read, all childs message display is read
             var ids = [this.id].concat( this.get_child_ids() );
-            this.ds_notification.call('set_message_read', [ids,$(event.srcElement).hasClass("oe_read")]);
+            
+            if($(event.srcElement).hasClass("oe_read")) {
+                this.ds_notification.call('set_message_read', [ids,true]);
+                this.$el.removeClass("oe_mail_unread").addClass("oe_mail_read");
+            } else {
+                this.ds_notification.call('set_message_read', [ids,false]);
+                this.$el.removeClass("oe_mail_read").addClass("oe_mail_unread");
+            }
             return false;
         },
 
@@ -598,8 +757,8 @@ openerp.mail = function(session) {
         display_vote: function () {
             var self = this;
             var vote_element = session.web.qweb.render('mail.thread.message.vote', {'widget': self});
-            self.$(".placeholder-mail-vote").empty();
-            self.$(".placeholder-mail-vote").html(vote_element);
+            self.$(".placeholder-mail-vote:first").empty();
+            self.$(".placeholder-mail-vote:first").html(vote_element);
         },
     });
 
@@ -609,11 +768,13 @@ openerp.mail = function(session) {
      * ------------------------------------------------------------
      *
      * This widget handles the display of a thread of messages. The
-     * [thread_level] parameter sets the thread level number:
-     * - root message
+     * thread view:
+     * - root thread
      * - - sub message (parent_id = root message)
-     * - - - sub sub message (parent id = sub message)
+     * - - - sub thread
+     * - - - - sub sub message (parent id = sub thread)
      * - - sub message (parent_id = root message)
+     * - - - sub thread
      */
     mail.Thread = session.web.Widget.extend({
         template: 'mail.thread',
@@ -627,7 +788,6 @@ openerp.mail = function(session) {
          * @param {Object} [options]
          *      @param {Object} [message] read about mail.ThreadMessage object
          *      @param {Object} [thread]
-         *          @param {Number} [thread_level=0] number of thread levels
          *          @param {Boolean} [use_composer] use the advanced composer, or
          *              the default basic textarea if not set
          *          @param {Number} [expandable_number=5] number message show
@@ -637,7 +797,7 @@ openerp.mail = function(session) {
          *          @param {Boolean} [display_on_flat] display all thread
          *              on the wall thread level (no hierarchy)
          *          @param {Array} [parents] liked with the parents thread
-         *              use with browse, fletch... [O]= top parent
+         *              use with browse, fetch... [O]= top parent
          */
         init: function(parent, options) {
             this._super(parent);
@@ -650,7 +810,7 @@ openerp.mail = function(session) {
             // options
             this.options={
                 'thread' : {
-                    'thread_level':         options.options.thread.thread_level || 0,
+                    'thread_level':         (options.options.thread.thread_level+1) || 0,
                     'show_header_compose':  (options.options.thread.show_header_compose != undefined ? options.options.thread.show_header_compose: false),
                     'use_composer':         options.options.thread.use_composer || false,
                     'expandable_number':    options.options.thread.expandable_number || 5,
@@ -670,6 +830,14 @@ openerp.mail = function(session) {
             this.id=            param.id || false;
             this.model=         param.model || false;
             this.parent_id=     param.parent_id || false;
+            this.is_private =   param.is_private || false;
+            this.author_id =   param.author_id || false;
+            this.partner_ids =  [];
+            for(var i in param.partner_ids){
+                if(param.partner_ids[i][0]!=(param.author_id ? param.author_id[0] : -1)){
+                    this.partner_ids.push(param.partner_ids[i]);
+                }
+            }
 
             this.messages = [];
 
@@ -687,8 +855,7 @@ openerp.mail = function(session) {
             this.display_user_avatar();
             var display_done = compose_done = false;
             
-            // add message composition form view
-            compose_done = this.instantiate_composition_form();
+            this.instantiate_ComposeMessage();
 
             this.bind_events();
 
@@ -699,23 +866,57 @@ openerp.mail = function(session) {
             return display_done && compose_done;
         },
 
-        /**
-        * Override-hack of do_action: automatically load message on the chatter.
-        * Normally it should be called only when clicking on 'Post/Send'
-        * in the composition form. */
-        do_action: function(action, on_close) {
-            this.instantiate_composition_form();
-            this.message_fletch(false, false, false, [action.id]);
-            return this._super(action, on_close);
+        instantiate_ComposeMessage: function(){
+            // add message composition form view
+            this.ComposeMessage = new mail.ThreadComposeMessage(this,{
+                'context': this.context,
+                'parameters': this,
+                'show_attachment_delete': true,
+            });
+            this.ComposeMessage.appendTo(this.$(".oe_mail_thread_action:first"));
         },
 
         /* this method is runing for first parent thread
         */
         on_first_thread: function(){
+            var self=this;
             // fetch and display message, using message_ids if set
-            display_done = this.message_fletch(true);
-            //show the first write message
-            this.$(">.oe_mail_thread_action").show();
+            this.message_fetch();
+
+            $(document).scroll( self.on_scroll );
+            window.setTimeout( self.on_scroll, 500 );
+
+            $(session.web.qweb.render('mail.wall_no_message', {})).appendTo(this.$('ul.oe_mail_thread_display'));
+
+            if(this.options.thread.show_header_compose){
+                this.ComposeMessage.$el.show();
+                //this.ComposeMessage.set_free_attachments();
+            }
+
+            var button_fetch = $('<button style="display:none;" class="oe_mail_wall_button_fetch"/>').click(function(event){
+                if(event)event.stopPropagation();
+                self.message_fetch();
+            });
+            this.$el.prepend(button_fetch);
+            this.$el.addClass("oe_mail_wall_first_thread");
+        },
+
+        /* When the expandable object is visible on screen (with scrolling)
+         * then the on_expandable function is launch
+        */
+        on_scroll: function(event){
+            if(event)event.stopPropagation();
+            var last=this.messages[0];
+            if(last && last.type=="expandable"){
+                var pos = last.$el.position();
+                if(pos.top){
+                    /* bottom of the screen */
+                    var bottom = $(window).scrollTop()+$(window).height()+100;
+                    if(bottom - pos.top > 0){
+                        last.on_expandable();
+                    }
+                }
+            }
         },
 
         /**
@@ -723,17 +924,8 @@ openerp.mail = function(session) {
          * in the function. */
         bind_events: function() {
             var self = this;
-            // event: writing in basic textarea of composition form (quick reply)
-            // event: onblur for hide 'Reply'
-            this.$('.oe_mail_compose_textarea:first textarea')
-                .keyup(function (event) {
-                    var charCode = (event.which) ? event.which : window.event.keyCode;
-                    if (event.shiftKey && charCode == 13) { this.value = this.value+"\n"; }
-                    else if (charCode == 13) { return self.message_post(); }
-                })
-                .blur(function (event) {
-                    $(this).parents('.oe_mail_thread_action:first').hide();
-                });
+            self.$('.oe_mail_compose_textarea .oe_more').click(function () { var p=$(this).parent(); p.find('.oe_more_hidden, .oe_hidden').show(); p.find('.oe_more').hide(); });
+            self.$('.oe_mail_compose_textarea .oe_more_hidden').click(function () { var p=$(this).parent(); p.find('.oe_more_hidden, .oe_hidden').hide(); p.find('.oe_more').show(); });
         },
 
         /* get all child message/thread id linked
@@ -796,71 +988,13 @@ openerp.mail = function(session) {
                 return this.options.thread._parents[0].messages[0].browse_message(options);
         },
 
-        /** Instantiate the composition form, with every parameters in context
-        *   or in the widget context.
-        *   @param {object}
-        *       @param {boolean} show_header_compose, force to instantiate form
-        */
-        instantiate_composition_form: function(context) {
-            // add message composition form view
-            if ((!context || !context.show_header_compose) &&
-                (!this.options.thread.show_header_compose || !this.options.thread.use_composer ||
-                (this.options.thread.show_header_compose <= this.options.thread._parents.length && this.options.thread._parents[0]!=this))) {
-                this.$("textarea:first").val("");
-                return false;
-            }
-            if (this.compose_message_widget) {
-                this.compose_message_widget.refresh();
-            } else {
-                var context = _.extend(context || {}, this.context);
-                this.compose_message_widget = new mail.ComposeMessage(this, {'context': context});
-                var composition_node = this.$('div.oe_mail_thread_action');
-                composition_node.empty();
-                return this.compose_message_widget.appendTo(composition_node);
-            }
-        },
-
         /* this function is launch when a user click on "Reply" button
         */
-        on_compose_message: function(full_reply, by_mail){
-            if(full_reply){
-                this.instantiate_composition_form({'show_header_compose':true});
-            }
-            if(by_mail){
-                if (!this.compose_message_widget) return true;
-                this.compose_message_widget.refresh({
-                    'default_composition_mode': 'reply',
-                    'default_parent_id': this.id,
-                    'default_content_subtype': 'html'} );
-            }
-            this.$('div.oe_mail_thread_action:first').toggle();
+        on_compose_message: function(){
+            this.ComposeMessage.$el.toggle();
             return false;
         },
 
-        refresh: function (action_context) {
-            var self=this;
-            _(this.messages).each(function(){ self.destroy(); });
-            self.message_fletch();
-        },
-
-        /*post a message and fletch the message*/
-        message_post: function (body) {
-            var self = this;
-            if (! body) {
-                var comment_node = this.$('textarea');
-                var body = comment_node.val();
-                comment_node.val('');
-            }
-            if(body.match(/\S+/)) {
-                this.ds_thread.call('message_post_api', [
-                    [this.context.default_res_id], body, false, 'comment', false, this.context.default_parent_id, undefined])
-                    .then(this.proxy('switch_new_message'));
-            }
-            else {
-                return false;
-            }
-        },
-
         /** Fetch messages
          * @param {Bool} initial_mode: initial mode: try to use message_data or
          *  message_ids, if nothing available perform a message_read; otherwise
@@ -868,7 +1002,7 @@ openerp.mail = function(session) {
          * @param {Array} replace_domain: added to this.domain
          * @param {Object} replace_context: added to this.context
          */
-        message_fletch: function (initial_mode, replace_domain, replace_context, ids) {
+        message_fetch: function (initial_mode, replace_domain, replace_context, ids) {
             var self = this;
 
             // initial mode: try to use message_data or message_ids
@@ -879,8 +1013,8 @@ openerp.mail = function(session) {
             fetch_domain = replace_domain ? replace_domain : this.domain;
             fetch_context = replace_context ? replace_context : this.context;
             fetch_context.message_loaded= [this.id||0].concat( self.options.thread._parents[0].get_child_ids() );
-            
-            return this.ds_message.call('message_read', [ids, fetch_domain, (this.options.thread.thread_level+1), fetch_context, this.context.default_parent_id || undefined]
+
+            return this.ds_message.call('message_read', [ids, fetch_domain, fetch_context, 0, this.context.default_parent_id || undefined]
                 ).then(this.proxy('switch_new_message'));
         },
 
@@ -906,6 +1040,8 @@ openerp.mail = function(session) {
         insert_message: function (message) {
             var self=this;
 
+            this.$("li.oe_wall_no_message").remove();
+
             if(message.type=='expandable'){
                 var message = new mail.ThreadExpandable(self, {
                     'domain': message.domain,
@@ -930,42 +1066,46 @@ openerp.mail = function(session) {
                 });
             }
 
-            var thread = self.options.thread.display_on_flat ? self.options.thread._parents[0] : this;
+            var thread_messages = (self.options.thread.display_on_flat && self.options.thread.thread_level ? self.options.thread._parents[0].messages : []).concat(self.messages);
+            var thread = (self.options.thread.display_on_flat && self.options.thread.thread_level ? self.options.thread._parents[0] : self);
 
             // check older and newer message for insert
             var parent_newer = false;
             var parent_older = false;
-            for(var i in thread.messages){
-                if(thread.messages[i].id > message.id){
-                    if(!parent_newer || parent_newer.id>thread.messages[i].id)
-                        parent_newer = thread.messages[i];
-                } else if(thread.messages[i].id>0 && thread.messages[i].id < message.id) {
-                    if(!parent_older || parent_older.id<thread.messages[i].id)
-                        parent_older = thread.messages[i];
+            for(var i in thread_messages){
+                if(thread_messages[i].id > message.id){
+                    if(!parent_newer || parent_newer.id>=thread_messages[i].id)
+                        parent_newer = thread_messages[i];
+                } else if(thread_messages[i].id>0 && thread_messages[i].id < message.id) {
+                    if(!parent_older || parent_older.id<thread_messages[i].id)
+                        parent_older = thread_messages[i];
                 }
             }
 
-            if(parent_newer)
-                message.insertAfter(parent_newer.$el);
-            else if(parent_older)
-                message.insertBefore(parent_older.$el);
-            else
-                message.prependTo(thread.list_ul);
+            var sort = self.options.thread.thread_level==0 || (self.options.thread.display_on_flat && self.options.thread.thread_level<=1);
 
-            return message
-        },
-
-        /* Hide messages if they are more message that _expandable_max
-        *  display "show more messages"
-        */
-        display_expandable: function(){
-            if(this.messages.length>this.options._expandable_max){
-                this.list_ul.find('>li:gt('+(this.options._expandable_max-1)+')').hide();
-                this.more_msg.show();
-            } else {
-                this.list_ul.find('>li').show();
-                this.more_msg.hide();
+            if(parent_older){
+                if(sort){
+                    message.insertBefore(parent_older.$el);
+                } else {
+                    message.insertAfter(parent_older.$el);
+                }
+            }
+            else if(parent_newer){
+                if(sort){
+                    message.insertAfter(parent_newer.$el);
+                } else {
+                    message.insertBefore(parent_newer.$el);
+                }
             }
+            else {
+                if(sort){
+                    message.prependTo(thread.list_ul);
+                } else {
+                    message.appendTo(thread.list_ul);
+                }
+            }
+            return message
         },
 
         display_user_avatar: function () {
@@ -1003,7 +1143,6 @@ openerp.mail = function(session) {
             this._super.apply(this, arguments);
             this.options.domain = this.options.domain || [];
             this.options.context = {'default_model': 'mail.thread', 'default_res_id': false};
-            this.options.thread_level = this.options.thread_level || 0;
         },
 
         start: function() {
@@ -1017,6 +1156,10 @@ openerp.mail = function(session) {
             this.$el.toggle(this.view.get("actual_mode") !== "create");
         },
 
+        /**
+         * Reinitialize the widget field and Display the threads
+         * @param {Object} new_context: context of the refresh
+          */
         set_value: function() {
             var self = this;
             this._super.apply(this, arguments);
@@ -1034,30 +1177,26 @@ openerp.mail = function(session) {
             var show_header_compose = this.view.is_action_enabled('edit') ||
                 (this.getParent().fields.message_is_follower && this.getParent().fields.message_is_follower.get_value());
 
+            if(this.thread){
+                this.thread.destroy();
+            }
             this.thread = new mail.Thread(self, {
                     'domain': domain,
                     'context': this.options.context,
                     'options':{
                         'thread':{
-                            'thread_level': this.options.thread_level,
                             'show_header_compose': show_header_compose,
                             'use_composer': show_header_compose,
                             'display_on_flat':true
                         },
                         'message':{
-                            'show_dd_delete': true,
-                            'show_reply_by_email': show_header_compose,
+                            'show_dd_delete': true
                         }
                     },
                     'parameters': {},
                 }
             );
-
-            this.$('ul.oe_mail_wall_threads').empty();
-            var render_res = session.web.qweb.render('mail.wall_thread_container', {});
-            $(render_res).appendTo(this.$('ul.oe_mail_wall_threads'));
-
-            return this.thread.appendTo( this.$('li.oe_mail_wall_thread:last') );
+            return this.thread.appendTo( this.$('.oe_mail_wall_threads:first') );
         },
     });
 
@@ -1089,7 +1228,6 @@ openerp.mail = function(session) {
             this.options = options || {};
             this.options.domain = options.domain || [];
             this.options.context = options.context || {};
-            this.options.thread_level = options.thread_level || 1;
             this.search_results = {'domain': [], 'context': {}, 'groupby': {}}
             this.ds_msg = new session.web.DataSetSearch(this, 'mail.message');
         },
@@ -1098,6 +1236,8 @@ openerp.mail = function(session) {
             this._super.apply(this, arguments);
             var searchview_ready = this.load_searchview({}, false);
             var thread_displayed = this.message_render();
+            this.options.domain = this.options.domain.concat(this.search_results['domain']);
+            this.bind_events();
             return (searchview_ready && thread_displayed);
         },
 
@@ -1135,36 +1275,36 @@ openerp.mail = function(session) {
             });
         },
 
-        /** Clean and display the threads */
-        message_render: function (search) {
-            var domain = this.options.domain.concat(this.search_results['domain']);
-
-            var domain = _.extend(this.options.domain, search&&search.domain? search.domain : {});
-            var context = _.extend(this.options.context, search&&search.context ? search.context : {});
 
+        /**
+         * Display the threads
+          */
+        message_render: function (search) {
             this.thread = new mail.Thread(this, {
-                    'domain' : domain,
-                    'context' : context,
+                    'domain' : this.options.domain.concat(this.search_results['domain']),
+                    'context' : _.extend(this.options.context, search&&search.search_results['context'] ? search.search_results['context'] : {}),
                     'options': {
                         'thread' :{
-                            'thread_level': this.options.thread_level,
                             'use_composer': true,
-                            'show_header_compose': 1, 
+                            'show_header_compose': false,
                         },
                         'message': {
-                            'show_reply': this.options.thread_level > 0,
+                            'show_reply': true,
                             'show_dd_hide': true,
+                            'show_dd_delete': true,
                         },
                     },
                     'parameters': {},
                 }
             );
+            return this.thread.appendTo( this.$('.oe_mail_wall_threads:first') );
 
-            this.$('ul.oe_mail_wall_threads').empty();
-            var render_res = session.web.qweb.render('mail.wall_thread_container', {});
-            $(render_res).appendTo(this.$('ul.oe_mail_wall_threads'));
-
-            return this.thread.appendTo( this.$('li.oe_mail_wall_thread:last') );
         },
+
+        bind_events: function(){
+            var self=this;
+            this.$("button.oe_write_full:first").click(function(){ self.thread.ComposeMessage.on_compose_fullmail(); });
+            this.$("button.oe_write_onwall:first").click(function(){ self.thread.ComposeMessage.$el.toggle(); });
+        }
     });
 };
index 6c016c6..236e308 100644 (file)
@@ -40,6 +40,7 @@ openerp_mail_followers = function(session, mail) {
             this._check_visibility();
             this.reinit();
             this.bind_events();
+            this.display_subtypes();
         },
 
         _check_visibility: function() {
@@ -53,31 +54,15 @@ openerp_mail_followers = function(session, mail) {
 
         bind_events: function() {
             var self = this;
-            this.$('div.oe_mouse_subtypes')
-                .on('mouseover', function () {
-                    $(this).removeClass('oe_mouseout').addClass('oe_mouseover');
-                    self.display_subtypes();
-                })
-                .on('mouseleave', function () {
-                    $(this).removeClass('oe_mouseover').addClass('oe_mouseout');
-                    self.display_subtypes();
-                });
-
             this.$('button.oe_follower')
                 .on('click', function () {
                     if($(this).hasClass('oe_notfollow'))
                         self.do_follow();
                     else
                         self.do_unfollow();
-                })
-                .on('mouseover', function () {
-                    $(this).removeClass('oe_mouseout').addClass('oe_mouseover');
-                })
-                .on('mouseleave', function () {
-                    $(this).removeClass('oe_mouseover').addClass('oe_mouseout');
                 });
 
-            this.$el.on('click', 'ul.oe_subtypes input', function () { self.do_update_subscription(); })
+            this.$el.on('click', 'ul.oe_subtypes input', self.do_update_subscription );
 
             this.$el.on('click', 'button.oe_invite', function(event) {
                 action = {
@@ -173,7 +158,8 @@ openerp_mail_followers = function(session, mail) {
 
         set_subtypes:function(data){
             var self = this;
-            var records = data[this.view.datarecord.id].message_subtype_data;
+            var records = (data[this.view.datarecord.id] || data[null]).message_subtype_data;
+
             _(records).each(function (record, record_name) {
                 record.name = record_name;
                 record.followed = record.followed || undefined;
@@ -194,16 +180,10 @@ openerp_mail_followers = function(session, mail) {
         },
         
         do_follow: function () {
-            var self =this;
             _(this.$('.oe_msg_subtype_check')).each(function(record){
                 $(record).attr('checked','checked');
             });
-            var context = new session.web.CompoundContext(this.build_context(), {});
-            return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], undefined, undefined, context]).pipe(function(value_){
-                    self.read_value(value_);
-                    if(!self.$('.oe_recthread_subtypes').is(":visible"))
-                        self.display_subtypes(true);
-                });
+            this.do_update_subscription();
         },
         
         do_unfollow: function () {
@@ -211,23 +191,28 @@ openerp_mail_followers = function(session, mail) {
                 $(record).attr('checked',false);
             });
             var context = new session.web.CompoundContext(this.build_context(), {});
-            return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], undefined, context]).pipe(this.proxy('read_value'));
+            return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], [this.session.uid], context]).pipe(this.proxy('read_value'));
         },
 
-        do_update_subscription: function () {
-            var context = new session.web.CompoundContext(this.build_context(), {});
+        do_update_subscription: function (event) {
             var self = this;
 
             var checklist = new Array();
-            _(this.$('.oe_msg_subtype_check')).each(function(record){
+            _(this.$('.oe_mail_recthread_actions input[type="checkbox"]')).each(function(record){
                 if($(record).is(':checked')) {
                     checklist.push(parseInt($(record).data('id')))}
             });
 
             if(!checklist.length)
                 return this.do_unfollow();
-            else
-                return this.ds_model.call('message_subscribe_users',[[self.view.datarecord.id], undefined, checklist, context]).pipe(this.proxy('read_value'));
+            else{
+                var context = new session.web.CompoundContext(this.build_context(), {});
+                return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], [this.session.uid], undefined, context]).pipe(function(value_){
+                        self.read_value(value_);
+                        self.display_subtypes(true);
+                    });
+            }
+
         },
 
     });
index 07c9b40..7941925 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>
 <template>
 
+    <!--
+        mail.compose_message template
+        This template holds the composition form to write a note or send
+        an e-mail. It contains by default a textarea, that will be replaced
+        by another composition form in the main wall composition form, or
+        for main thread composition form in document form view.
+        -->
+    <t t-name="mail.compose_message">
+        <div class="oe_mail_compose_textarea">
+            <img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
+            <div class="oe_mail_msg_content">
+                <!-- contains the composition form -->
+                <!-- default content: old basic textarea -->
+                <div class="oe_mail_post_header">
+                    <t t-call="mail.thread.list_recipients"/>
+                    <a class="oe_cancel oe_e">X</a>
+                </div>
+                <textarea class="field_text" placeholder="Add your comment here..."/>
+                <div class="oe_mail_post_footer">
+                    <div class="oe_mail_compose_attachment_list"/>
+                    <button class="oe_full">Full mail message</button>
+                    <button class="oe_post">Post message</button>
+                    <t t-call="mail.compose_message.add_attachment"/>
+                </div>
+            </div>
+            <div class="oe_clear"/>
+        </div>
+    </t>
+
+    <!--
+        mail.compose_message.add_attachment template
+        Small template to be inserted in the composition for add attachments
+        -->
+    <t t-name="mail.compose_message.add_attachment">
+        <div class="oe_attachment_file">
+            <div class="oe_add">
+                <!-- uploader of file -->
+                <button><span class="oe_e">p</span></button>
+                <t t-call="HiddenInputFile">
+                    <t t-set="fileupload_id" t-value="widget.fileupload_id"/>
+                    <t t-set="fileupload_action">/web/binary/upload_attachment</t>
+                    <input type="hidden" name="model" value=""/>
+                    <input type="hidden" name="id" value="0"/>
+                    <input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
+                </t>
+            </div>
+        </div>
+    </t>
+
+    <!--
+        mail.thread.message.attachments template
+        Template used to display attachments in a mail.message
+        -->
+    <t t-name="mail.thread.message.attachments">
+        <ul t-attf-class="oe_mail_msg_attachments #{widget.attachment_ids[0] and widget.options.thread.show_attachment_link?'':'oe_hidden'}">
+            <t t-foreach="widget.attachment_ids" t-as="attachment">
+                <li>
+                    <span t-if="(attachment.upload or attachment.percent_loaded&lt;100)" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}" t-attf-name="{attachment.name || attachment.filename}">
+                        <div class="oe_upload_in_process">
+                            <span>Upload in progress...</span>
+                            <div t-attf-style="{attachment.percent_loaded&gt;0?'':'display:none;'}"/>
+                            <div t-attf-style="{attachment.percent_loaded&gt;20?'':'display:none;'}"/>
+                            <div t-attf-style="{attachment.percent_loaded&gt;40?'':'display:none;'}"/>
+                            <div t-attf-style="{attachment.percent_loaded&gt;60?'':'display:none;'}"/>
+                            <div t-attf-style="{attachment.percent_loaded&gt;80?'':'display:none;'}"/>
+                        </div>
+                        <t t-raw="attachment.name || attachment.filename"/>
+                    </span>
+                    <a t-if="(!attachment.upload or attachment.percent_loaded&gt;=100)" t-att-href="attachment.url" t-attf-title="{(attachment.name || attachment.filename) + (attachment.date?' \n('+attachment.date+')':'' )}">
+                        <t t-raw="attachment.name || attachment.filename"/>
+                    </a>
+                    <t t-if="widget.options.thread.show_attachment_delete and (!attachment.upload or attachment.percent_loaded&gt;=100)">
+                        <a class="oe_right oe_mail_attachment_delete" title="Delete this attachment" t-attf-data-id="{attachment.id}">x</a>
+                    </t>
+
+                </li>
+            </t>
+        </ul>
+    </t>
+
+    <t t-name="mail.thread.message.private">
+        <div>
+            <span class="oe_placeholder_checkbox_private"/>
+            <span class="oe_send_private">This email is private.</span>
+            <span class="oe_send_public">I wrote for contacts and all my followers.</span>
+        </div>
+    </t>
+
+    <!--
+        template to the recipients list
+        -->
+    <t t-name="mail.thread.list_recipients">
+        <div class="oe_mail_list_recipients">
+            Post to: 
+            <span t-if="!widget.is_private" class="oe_all_follower">All Followers</span> 
+            <t t-if="!widget.is_private and widget.partner_ids.length"> and </t>
+            <t t-set="inc" t-value="0"/>
+            <t t-if="widget.partner_ids.length" t-foreach="widget.partner_ids" t-as="partner"><span t-attf-class="oe_partner_follower #{inc>=3?'oe_hidden':''}"><t t-if="inc" t-raw="', '"/><a t-attf-href="#model=res.partner&amp;id=#{partner[0]}"><t t-raw="partner[1]"/></a></span><t t-set="inc" t-value="inc+1"/>
+            </t>
+            <t t-if="widget.partner_ids.length>=3">
+                <span class="oe_more">, <a><t t-raw="widget.partner_ids.length-3"/> others...</a></span>
+                <a class="oe_more_hidden">&lt;&lt;&lt;</a>
+            </t>
+        </div>
+    </t>
+
     <!-- 
         wall main template
         Template used to display the communication history in the wall.
         -->
-    <div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manager_current">
+    <div t-name="mail.wall" class="oe_view_manager oe_mail_wall oe_view_manag
+        er_current">
         <table class="oe_view_manager_header">
           <colgroup>
             <col width="33%"/>
                 </td>
                 <td><div class="oe_view_manager_view_search" t-opentag="true"/></td>
             </tr>
+            <tr class="oe_header_row">
+                <td colspan="2">
+                    <button type="button" class="oe_write_full oe_highlight">
+                        Compose a new message
+                    </button>
+                    <button type="button" class="oe_write_onwall" help="Your followers can read this message">
+                        Write to your followers
+                    </button>
+                </td>
+            </tr>
           </tbody>
         </table>
-        <ul class="oe_mail_wall_threads">
-            <!-- contains threads -->
-        </ul>
+        <!-- placeholder for the wall threads -->
+        <div class="oe_mail_wall_threads"/>
         <div class="oe_mail_wall_aside">
                 <!-- contains currently nothing -->
         </div>
     </div>
 
     <!--
-        wall_thread_container template for the wall
-        Each discussion thread is contained inside this template
+        display message on the wall when there are no message
         -->
-    <li t-name="mail.wall_thread_container" class="oe_mail_wall_thread">
+    <li t-name="mail.wall_no_message" class="oe_wall_no_message">
+        You have no messages
     </li>
 
     <!--
     </div>
 
     <!--
-        mail.compose_message template
-        This template holds the composition form to write a note or send
-        an e-mail. It contains by default a textarea, that will be replaced
-        by another composition form in the main wall composition form, or
-        for main thread composition form in document form view.
-        -->
-    <t t-name="mail.compose_message">
-        <div class="oe_mail_compose_textarea">
-            <img class="oe_mail_icon oe_mail_frame oe_left" alt="User img"/>
-            <div class="oe_mail_msg_content">
-                <!-- contains the composition form -->
-                <!-- default content: old basic textarea -->
-                <textarea placeholder="Add your comment here..."/>
-            </div>
-            <div class="oe_clear"/>
-        </div>
-    </t>
-
-    <!--
-        mail.compose_message.add_attachment template
-        Small template to be inserted in the composition form to add attachments
-        -->
-    <t t-name="mail.compose_message.add_attachment">
-        <t t-call="HiddenInputFile">
-            <t t-set="fileupload_id" t-value="widget.fileupload_id"/>
-            <t t-set="fileupload_action">/web/binary/upload_attachment</t>
-            <input type="hidden" name="model" t-att-value="widget.form_view.model"/>
-            <input type="hidden" name="id" t-att-value="widget.form_view.datarecord.id || 0"/>
-            <input type="hidden" name="session_id" t-att-value="widget.session.session_id"/>
-        </t>
-    </t>
-
-    <!--
         thread template
         This template holds a thread of comments. It begins with an actions
         container, holding the composition form. Then come the various
     <div t-name="mail.thread" class="oe_mail oe_mail_thread oe_semantic_html_override">
         <div class="oe_mail_thread_action">
             <!-- contains the composition box (form + image) -->
-            <t t-call="mail.compose_message"/>
         </div>
         <ul class="oe_mail_thread_display">
             <!-- contains the threads -->
     </div>
 
     <!-- default layout -->
-    <li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}" t-attf-data-msg_id="{widget.id}">
+    <li t-name="mail.thread.message" t-attf-class="oe_mail oe_mail_thread_msg #{widget.unread?'oe_mail_unread':'oe_mail_read'}">
         <div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
             <!-- message actions (read/unread, reply, delete...) -->
             <ul class="oe_header">
                 <li class="placeholder-mail-vote"><t t-call="mail.thread.message.vote"/></li>
-                <li t-if="!widget.options.thread.display_on_flat and widget.unread" title="Read"><a class="oe_read oe_e">W</a></li>
-                <li t-if="!widget.options.thread.display_on_flat and !widget.unread" title="Set back to unread"><a class="oe_unread oe_e">h</a></li>
-                <li t-if="!widget.options.message.show_reply_by_email" title="Reply"><a class="oe_reply oe_e">)</a></li>
-                <li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_e" title="Reply by mail">)</a></li>
-                <t t-if="(widget.options.message.show_reply || widget.options.message.show_reply_by_email || (widget.is_author and widget.options.message.show_dd_delete) || widget.type == 'email')">
+                <li t-if="!widget.options.thread.display_on_flat" title="Read" class="oe_read"><a class="oe_read oe_e">W</a></li>
+                <li t-if="!widget.options.thread.display_on_flat" title="Set back to unread" class="oe_unread"><a class="oe_unread oe_e">h</a></li>
+                <li title="Quick reply"><a class="oe_reply oe_e">)</a></li>
+                <t t-if="(widget.is_author and widget.options.message.show_dd_delete) or widget.type == 'email'">
                     <li>
                         <span class="oe_dropdown_toggle">
                             <a class="oe_e" title="More options">í</a>
                                 <li t-if="display['show_hide']">
                                     <a href="#" class="oe_mail_msg_hide_type" t-attf-data-subtype='{widget.subtype}'>Hide '<t t-esc="widget.subtype"/>' for this document</a>
                                 </li> -->
-                                <li t-if="widget.options.message.show_reply" title="Reply"><a class="oe_reply oe_full_reply">Full reply</a></li>
-                                <li t-if="widget.options.message.show_reply_by_email"><a class="oe_reply_by_email oe_full_reply" title="Reply by mail">Full reply</a></li>
                                 <li t-if="widget.type == 'email'"><a class="oe_mail_msg_details" t-attf-href="#model=mail.message&amp;id=#{widget.id}" >Details</a></li>
                             </ul>
                         </span>
                     <ul class="oe_mail_msg_footer">
                         <li t-if="widget.author_id"><a t-attf-href="#model=res.partner&amp;id=#{widget.author_id[0]}"><t t-raw="widget.author_id[1]"/></a></li>
                         <li><span t-att-title="widget.date"><t t-raw="widget.timerelative"/></span></li>
-                        
                         <li t-if="widget.attachment_ids.length > 0">
                             <a class="oe_mail_msg_view_attachments">
                                 <t t-if="widget.attachment_ids.length == 1">1 Attachment</t>
                     </ul>
                     <div class="oe_clear"/>
                     <div class="oe_mail_msg_body">
-                        <t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and widget.options.thread._parents.length&lt;=widget.options.thread.thread_level and widget.model!='res.partner'">
+                        <t t-if="widget.options.message.show_record_name and widget.record_name and (!widget.subject) and !widget.options.thread.thread_level and !widget.options.thread.display_on_flat and widget.model!='res.partner'">
                             <a class="oe_mail_action_model" t-attf-href="#model=#{widget.model}&amp;id=#{widget.res_id}"><t t-raw="widget.record_name"/></a>
                         </t>
                         <t t-raw="widget.body"/>
     </li>
 
     <!-- expandable message layout -->
-    <li t-name="mail.thread.expandable" t-attf-class="oe_mail oe_mail_thread_msg oe_mail_unread" t-attf-data-thread_id="{widget.id}">
+    <li t-name="mail.thread.expandable" class="oe_mail oe_mail_thread_msg oe_mail_unread">
         <div t-attf-class="oe_mail_msg_#{widget.type} oe_semantic_html_override">
             <div class="oe_mail_msg_content oe_mail_msg_more_message">
                 <a class="oe_mail_fetch_more">Load more messages <span t-if="widget.nb_messages>0">(<t t-raw="widget.nb_messages"/> messages not display)</span>...</a>
         </div>
     </li>
 
-    <!--
-        mail.thread.message.attachments template
-        Template used to display attachments in a mail.message
-        -->
-    <t t-name="mail.thread.message.attachments">
-        <ul class="oe_mail_msg_attachments">
-            <t t-foreach="record.attachment_ids" t-as="attachment">
-                <li>
-                    <a t-att-href="attachment.url"><t t-raw="attachment.name || attachment.filename"/></a>
-                    <t t-if="record.show_attachment_delete">
-                        <a class="oe_right oe_mail_attachment_delete" title="Delete this attachmentt" t-attf-data-id="{attachment.id}">x</a>
-                    </t>
-                </li>
-            </t>
-        </ul>
-    </t>
-
     <!-- mail.thread.message.vote
         Template used to display Like/Unlike in a mail.message
     -->
         <button t-attf-class="oe_mail_msg_vote oe_tag">
             <span>
                 <t t-if="!widget.has_voted">Agree</t>
-                <t t-if="widget.has_voted">Unagree</t>
+                <t t-if="widget.has_voted">Undo</t>
             </span>
         </button>
     </span>
index a6df1f0..f78c91c 100644 (file)
@@ -13,9 +13,9 @@
                     <span class="oe_unfollow">Unfollow</span>
                     <span class="oe_following">Following</span>
                 </button>
-                <div class="oe_recthread_subtypes">
-                    <ul class="oe_subtypes"></ul>
-                </div>
+            </div>
+            <div class="oe_recthread_subtypes">
+                <ul class="oe_subtypes"></ul>
             </div>
         </div>
         <div class="oe_grey">
index 1fc44ed..a94c4fc 100644 (file)
@@ -529,109 +529,6 @@ class test_mail(TestMailMockups):
         self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
         self.assertEqual(message2.body, group_bird.description, 'mail.message body incorrect')
 
-    # FP Note: to be reviewed to be more generic, not depending on the algorythm of
-    #          message_read
-    #def test_30_message_read(self):
-    #    """ Tests designed for message_read. """
-    #    # TDE NOTE: this test is not finished, as the message_read method is not fully specified.
-    #    # It will be updated as soon as we have fixed specs !
-    #    cr, uid = self.cr, self.uid
-    #    group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
-
-    #    def _compare_structures(struct1, struct2, n=0):
-    #        # print '%scompare structure' % ('\t' * n)
-    #        # self.assertEqual(len(struct1), len(struct2), 'message_read structure number of childs incorrect')
-
-    #        for x in range(len(struct1)):
-    #            if struct1[x].get('type') == 'expandable':
-    #                continue
-    #            # print '%s' % ('\t' * n), struct1[x]['id'], struct1[x]['child_nbr'], struct2[x]['id'], struct2[x].get('child_nbr', 'XX'), struct1[x].get('subject') or ''
-    #            self.assertEqual(struct1[x]['id'], struct2[x]['id'], 'message_read failure %s' % struct1[x].get('subject'))
-    #            _compare_structures(struct1[x]['child_ids'], struct2[x]['child_ids'], n + 1)
-    #        # print '%send compare' % ('\t' * n)
-
-    #    # ----------------------------------------
-    #    # CASE1: Flattening test
-    #    # ----------------------------------------
-
-    #    # Create dummy message structure
-    #    import copy
-    #    tree = [{'id': 2, 'child_nbr': 1, 'child_ids': [
-    #                {'id': 6, 'child_nbr': 1, 'child_ids': [
-    #                    {'id': 8, 'child_nbr': 0, 'child_ids': []},
-    #                    ]},
-    #                ]},
-    #            {'id': 1, 'child_nbr': 3, 'child_ids':[
-    #                {'id': 7, 'child_nbr': 1, 'child_ids': [
-    #                    {'id': 9, 'child_nbr': 0, 'child_ids': []},
-    #                    ]},
-    #                {'id': 4, 'child_nbr': 2, 'child_ids': [
-    #                    {'id': 10, 'child_nbr': 0, 'child_ids': []},
-    #                    {'id': 5, 'child_nbr': 0, 'child_ids': []},
-    #                    ]},
-    #                {'id': 3, 'child_nbr': 0, 'child_ids': []},
-    #                ]},
-    #            ]
-    #    # Test: completely flat
-    #    new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 0, limit=15, add_expandable=False)
-    #    _compare_structures(new_tree, new_tree)
-    #    self.assertEqual(len(new_tree), 10, 'message_read_tree_flatten wrong in flat')
-    #    # Test: 1 thread level
-    #    tree_test = [{'id': 2, 'child_ids': [
-    #                    {'id': 8, 'child_ids': []}, {'id': 6, 'child_ids': []},
-    #                ]},
-    #                {'id': 1, 'child_ids': [
-    #                    {'id': 10, 'child_ids': []}, {'id': 9, 'child_ids': []},
-    #                    {'id': 7, 'child_ids': []}, {'id': 5, 'child_ids': []},
-    #                    {'id': 4, 'child_ids': []}, {'id': 3, 'child_ids': []},
-    #                ]},
-    #                ]
-    #    new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 1, limit=15, add_expandable=False)
-    #    _compare_structures(new_tree, tree_test)
-    #    # Test: 2 thread levels
-    #    new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 2, limit=15, add_expandable=False)
-    #    _compare_structures(new_tree, tree)
-
-    #    # ----------------------------------------
-    #    # CASE2: message_read test
-    #    # ----------------------------------------
-
-    #    # 1. Add a few messages to pigs group
-    #    msgid1 = group_pigs.message_post(body='1', subject='1', parent_id=False)
-    #    msgid2 = group_pigs.message_post(body='2', subject='1-1', parent_id=msgid1)
-    #    msgid3 = group_pigs.message_post(body='3', subject='1-2', parent_id=msgid1)
-    #    msgid4 = group_pigs.message_post(body='4', subject='2', parent_id=False)
-    #    msgid5 = group_pigs.message_post(body='5', subject='1-1-1', parent_id=msgid2)
-    #    msgid6 = group_pigs.message_post(body='6', subject='2-1', parent_id=msgid4)
-
-    #    # Test: read all messages flat
-    #    tree_test = [{'id': msgid6, 'child_ids': []}, {'id': msgid5, 'child_ids': []},
-    #                    {'id': msgid4, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
-    #                    {'id': msgid2, 'child_ids': []}, {'id': msgid1, 'child_ids': []}]
-    #    tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=0, limit=15)
-    #    _compare_structures(tree, tree_test)
-    #    # Test: read with 1 level of thread
-    #    tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
-    #                {'id': msgid1, 'child_ids': [
-    #                    {'id': msgid5, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
-    #                    {'id': msgid2, 'child_ids': []},
-    #                ]},
-    #                ]
-    #    tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=1, limit=15)
-    #    _compare_structures(tree, tree_test)
-    #    # Test: read with 2 levels of thread
-    #    tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
-    #                {'id': msgid1, 'child_ids': [
-    #                    {'id': msgid3, 'child_ids': []},
-    #                    {'id': msgid2, 'child_ids': [{'id': msgid5, 'child_ids': []}, ]},
-    #                ]},
-    #                ]
-    #    tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=2, limit=15)
-    #    _compare_structures(tree, tree_test)
-
-    #    # 2. Test expandables
-    #    # TDE FIXME: add those tests when expandables are specified and implemented
-
     def test_40_needaction(self):
         """ Tests for mail.message needaction. """
         cr, uid = self.cr, self.uid
index d4dcafe..7d75c67 100644 (file)
@@ -223,7 +223,6 @@ class mail_compose_message(osv.TransientModel):
             email(s), rendering any template patterns on the fly if needed. """
         if context is None:
             context = {}
-        print '**', context
         active_ids = context.get('active_ids')
 
         for wizard in self.browse(cr, uid, ids, context=context):
index 0f384dc..7329992 100644 (file)
                         <field name="partner_ids" widget="many2many_tags" placeholder="Add contacts to notify..."
                                 context="{'force_email':True}"
                                 on_change="onchange_partner_ids(partner_ids)"/>
+                        <field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/>
                     </group>
                     <notebook>
                         <page string="Body">
-                            <field name="body_text" nolabel="1"
-                                attrs="{'invisible':[('content_subtype', '=', 'html')]}"/>
-                            <field name="body" nolabel="1"
-                                attrs="{'invisible':[('content_subtype', '=', 'plain')]}"/>
+                            <field name="body" nolabel="1"/>
                         </page>
                         <page string="Attachments">
                             <field name="attachment_ids" colspan="4" nolabel="1"/>
                         <button string="Send" name="send_mail" type="object" class="oe_highlight"  />
                         or
                         <button string="Cancel" class="oe_link" special="cancel" />
-                        <div class="oe_right">
+                        <!--div class="oe_right">
                             <button string="" name="toggle_content_subtype" type="object" icon="/mail/static/src/img/formatting.png" 
                                 help="Toggle advanced formatting mode"/>
-                        </div>
+                        </div-->
                     </footer>
                 </form>
             </field>
@@ -68,6 +66,7 @@
                                 context="{'force_email':True}"
                                 on_change="onchange_partner_ids(partner_ids)"
                                 class="oe_mail_compose_message_partner_ids"/>
+                        <!--field name="is_private" help="If this message is not private, this message will send to all your followers or all followers of the parented message."/-->
                         <field name="attachment_ids" colspan="2" nolabel="1" widget="many2many_tags"
                                 placeholder="Add attachments..." invisible="1"
                                 class="oe_mail_compose_message_attachment_ids"/>
index db79ce4..d369349 100644 (file)
@@ -5,7 +5,7 @@
         <field name="name">campaign.analysis.tree</field>
         <field name="model">campaign.analysis</field>
         <field name="arch" type="xml">
-            <tree string="Marketing Reports">
+            <tree string="Marketing Reports" create="false">
                 <field name="year" invisible="1"/>
                 <field name="month" invisible="1"/>
                 <field name="day" invisible="1"/>
index 81e1a3d..99dcc73 100644 (file)
@@ -8,7 +8,7 @@
             <field name="name">report.membership.tree</field>
             <field name="model">report.membership</field>
             <field name="arch" type="xml">
-                <tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " string="Membership">
+                <tree colors="blue:membership_state == 'draft';black:membership_state in ('open','free');gray:membership_state in ('done','cancel') " create="false" string="Membership">
                     <field name="partner_id"/>
                     <field name="membership_state"/>
                     <field name="associate_member_id" invisible="1"/>
index 73564f2..66806c4 100644 (file)
@@ -29,7 +29,7 @@
     'sequence': 18,
     'summary': 'Manufacturing Orders, Bill of Materials, Routing',
     'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
-    'depends': ['procurement', 'stock', 'resource', 'purchase', 'product','process'],
+    'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'],
     'description': """
 Manage the Manufacturing process in OpenERP
 ===========================================
index 8c4a422..aed215f 100644 (file)
@@ -7,14 +7,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 6.0dev\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 00:49+0000\n"
-"PO-Revision-Date: 2012-02-22 07:45+0000\n"
+"PO-Revision-Date: 2012-10-12 23:20+0000\n"
 "Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-13 04:38+0000\n"
-"X-Generator: Launchpad (build 15944)\n"
+"X-Launchpad-Export-Date: 2012-10-14 04:39+0000\n"
+"X-Generator: Launchpad (build 16137)\n"
 
 #. module: mrp
 #: view:mrp.routing.workcenter:0
@@ -956,7 +956,7 @@ msgstr "Bezeichnung Arbeitsplatz"
 #. module: mrp
 #: field:mrp.routing,code:0
 msgid "Code"
-msgstr "Kurzbezeichnung"
+msgstr "Kurzbez."
 
 #. module: mrp
 #: report:mrp.production.order:0
index abf0f82..a144897 100644 (file)
             <data>
                 <xpath expr="//field[@name='move_id']" position="before">
                     <field name="bom_id" domain="[('product_id','=',product_id),('bom_id','=',False)]"/>
+                    <field name="production_id" attrs="{'invisible': [('production_id','=',False)]}"/>
                 </xpath>
                 <xpath expr="//field[@name='close_move']" position="after">
                     <group colspan="4"  groups="product.group_mrp_properties">
                </data>
             </field>
         </record>
-        <record id="product.product_normal_form_supply_view" model="ir.ui.view">
+        <record id="product_product_normal_form_supply_view" model="ir.ui.view">
             <field name="name">product.normal.form.mrp.inherit</field>
             <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view"/>
+            <field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
             <field name="arch" type="xml">
                 <xpath expr="//field[@name='supply_method']" position="attributes">
                     <attribute name="invisible">False</attribute>
                 </xpath>
                 <group name="procurement_help" position="inside">
-                    <p attrs="{'invisible': [('type','=','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','produce')]}">
+                    <p attrs="{'invisible': ['|','|',('type','=','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','produce')]}">
                         When you sell this product, OpenERP will trigger <b>a manufacturing
                         order</b> using the bill of materials assigned to this product.
                         The delivery order will be ready once the production is done.
                     </p>
-</group>
+                </group>
             </field>
         </record>
 
         <record model="ir.actions.act_window" id="product_open_bom">
             <field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field>
             <field name="name">Bill of Materials</field>
+            <field name="domain">[('bom_id','=',False)]</field>
             <field name="res_model">mrp.bom</field>
         </record>
 
                 </xpath>
             </field>
         </record>
-
-
     </data>
 </openerp>
index 795ac54..19f8a48 100644 (file)
@@ -31,6 +31,7 @@ class procurement_order(osv.osv):
     _columns = {
         'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
         'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
+        'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
     }
     
     def check_produce_product(self, cr, uid, procurement, context=None):
@@ -95,16 +96,22 @@ class procurement_order(osv.osv):
                 'move_prod_id': res_id,
                 'company_id': procurement.company_id.id,
             })
+            
             res[procurement.id] = produce_id
-            self.write(cr, uid, [procurement.id], {'state': 'running'})
-            self.running_send_note(cr, uid, ids, context=context)
+            self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})   
             bom_result = production_obj.action_compute(cr, uid,
                     [produce_id], properties=[x.id for x in procurement.property_ids])
             wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
             if res_id:
                 move_obj.write(cr, uid, [res_id],
                         {'location_id': procurement.location_id.id})
+        self.production_order_create_note(cr, uid, ids, context=context)
         return res
+
+    def production_order_create_note(self, cr, uid, ids, context=None):
+        for procurement in self.browse(cr, uid, ids, context=context):
+            body = _("Manufacturing Order created.")
+            self.message_post(cr, uid, [procurement.id], body=body, context=context)
     
 procurement_order()
 
index cca9a7e..de486fa 100644 (file)
@@ -9,7 +9,7 @@
             <field name="name">mrp.workorder.tree</field>
             <field name="model">mrp.workorder</field>
             <field name="arch" type="xml">
-               <tree string="Work Orders">
+               <tree string="Work Orders" create="false">
                       <field name="date" invisible="1"/>
                       <field name="product_id" invisible="1"/>
                       <field name="product_qty" sum="Product Qty"/>
index be5737d..202ed6e 100644 (file)
             <para style="terp_default_Right_9">[[ formatLang(line.price_unit) ]] </para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line.price_subtotal) ]] [[ o.pricelist_id.currency_id. symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(line.price_subtotal, currency_obj = o.pricelist_id.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_default_Right_9">[[ formatLang(fees.price_unit) ]]</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(fees.price_subtotal) ]] [[ o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(fees.price_subtotal, currency_obj = o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
           <para style="terp_default_9">Net Total :</para>
         </td>
         <td>
-          <para style="P26">[[ formatLang(o.amount_untaxed, dp='Sale Price')]] [[ o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="P26">[[ formatLang(o.amount_untaxed, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
 
       </tr>
           <para style="terp_default_9">Taxes:</para>
         </td>
         <td>
-          <para style="P26">[[ formatLang(o.amount_tax, dp='Account')]] [[ o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="P26">[[ formatLang(o.amount_tax, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_tblheader_Details">Total :</para>
         </td>
         <td>
-          <para style="terp_default_right_bold_9">[[ formatLang(total(o), dp='Sale Price') ]] [[ o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="terp_default_right_bold_9">[[ formatLang(total(o), dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index dfd0d73..788c301 100644 (file)
@@ -1300,7 +1300,7 @@ class product_product(osv.osv):
         'expense_pdt': fields.boolean('Point of Sale Cash Out', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
         'pos_categ_id': fields.many2one('pos.category','Point of Sale Category',
             help="If you want to sell this product through the point of sale, select the category it belongs to."),
-        'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"),
+        'to_weight' : fields.boolean('To Weigh', help="This category contains products that should to be weighed, mainly used for the self-checkout interface"),
     }
 
     def _default_pos_categ_id(self, cr, uid, context=None):
index dc6e6c5..0b633f3 100644 (file)
           <para style="terp_default_Centre_8">[[ formatLang(statement.closing_date,date_time=True)]]</para>
         </td>
         <td>
-          <para style="terp_default_Centre_8">[[ formatLang(statement.balance_start, dp='Account') ]][[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Centre_8">[[ formatLang(statement.balance_start, dp='Account', currency_obj = company.currency_id) ]]</para>
         </td>
         <td>
-          <para style="terp_default_Centre_8">[[ formatLang(statement.balance_end_real, dp='Account') ]][[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Centre_8">[[ formatLang(statement.balance_end_real, dp='Account', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
               <para style="terp_default_9">[[ line_ids.partner_id.name ]]</para>
             </td>
             <td>
-              <para style="terp_default_Right_9">[[ formatLang(line_ids.amount, dp='Account') ]] [[ company.currency_id.symbol ]]</para>
+              <para style="terp_default_Right_9">[[ formatLang(line_ids.amount, dp='Account', currency_obj=company.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
           <para style="terp_tblheader_Details">Total :</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(get_total(statement.line_ids), dp='Account') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(get_total(statement.line_ids), dp='Account', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 0e75e7f..dc3b432 100644 (file)
@@ -73,7 +73,7 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse):
         if res:
             return res[0]['bal']
         else:
-            return False
+            return 0
 
     def _get_sub_total(self, user, data, date):
         res={}
index bb58c5e..4f16031 100644 (file)
           </para>
         </td>
         <td>
-          <para style="terp_tblheader_General_Right"><u>[[ formatLang(get_net_total_starting(user)[1]) ]] [[company.currency_id.symbol]]</u></para>
+          <para style="terp_tblheader_General_Right"><u>[[ formatLang(get_net_total_starting(user)[1], currency_obj = company.currency_id)]]</u></para>
         </td>
         <td>
-          <para style="terp_tblheader_General_Right"><u>[[ formatLang(get_net_total(user)) ]] [[company.currency_id.symbol]]</u></para>
+          <para style="terp_tblheader_General_Right"><u>[[ formatLang(get_net_total(user), currency_obj = company.currency_id)]]</u></para>
         </td>
       </tr>
     </blockTable>
             <para style="terp_default_Bold_8">[[ statement['closing_date'] ]]</para>
           </td>
           <td>
-            <para style="P1"><u>[[ (get_bal(statement)) or '0.00' ]] [[company.currency_id.symbol]]</u></para>
+            <para style="P1"><u>[[ formatLang(get_bal(statement), currency_obj = company.currency_id)]]</u></para>
           </td>
           <td>
-            <para style="P1"><u>[[ formatLang(get_sub_total(user,statement['journal_id'],statement['date'])) ]] [[company.currency_id.symbol]]</u></para>
+            <para style="P1"><u>[[ formatLang(get_sub_total(user,statement['journal_id'],statement['date']), currency_obj = company.currency_id )]]</u></para>
           </td>
         </tr>
       </blockTable>
               </para>
             </td>
             <td>
-              <para style="terp_default_Right_9">[[ formatLang(line_ids['amount']) ]] [[company.currency_id.symbol]]</para>
+              <para style="terp_default_Right_9">[[ formatLang(line_ids['amount'], currency_obj = company.currency_id)]]</para>
             </td>
           </tr>
         </blockTable>
index b001913..e7c4c75 100644 (file)
             <para style="terp_default_9">[ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line_ids['price_unit'], dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(line_ids['price_unit'], dp='Sale Price', currency_obj = company.currency_id) ]]</para>
           </td>
           <td>
             <para style="terp_default_Centre_9">[[ formatLang(line_ids['qty']) ]] [[ line_ids['uom'] ]]</para>
             <para style="terp_default_9">[[ p['name'] or removeParentNode('para') ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9_Bold">[[ formatLang(p['amount']) or removeParentNode('tr') ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9_Bold">[[ formatLang(p['amount'], currency_obj = company.currency_id) or removeParentNode('tr') ]]</para>
           </td>
         </tr>
       </blockTable>
             <para style="terp_default_9">[[ p['name'] or removeParentNode('para') ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9_Bold">[[ formatLang(p['sum'], dp='Account') or removeParentNode('tr') ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9_Bold">[[ formatLang(p['sum'], dp='Account', currency_obj = company.currency_id) or removeParentNode('tr') ]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_default_Bold_9">Sales total(Revenue)</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(getsalestotal2(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getsalestotal2(), dp='Sale Price', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total invoiced</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(getsuminvoice2(data['form']), dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getsuminvoice2(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total discount</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(getsumdisc(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getsumdisc(), dp='Sale Price', currency_obj =  company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total paid</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(getpaidtotal2(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getpaidtotal2(), dp='Sale Price', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total of the day</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(gettotalofthaday(data['form']), dp='Sale Price') ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(gettotalofthaday(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index d12cdec..b1c71db 100644 (file)
             <para style="P1">[[ p[0] ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9_Bold">[[ p[1] ]] [[company.currency_id.symbol]]</para>
+            <para style="terp_default_Right_9_Bold">[[ formatLang(p[1], currency_obj=company.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
             <para style="P2">[[ t[0] ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9_Bold">[[ '%.2f' % (t[1],) ]] [[company.currency_id.symbol]]</para>
+            <para style="terp_default_Right_9_Bold">[[ formatLang(t[1], currency_obj=company.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_default_Bold_9">Total invoiced</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ '%.2f' % getsuminvoice(objects) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getsuminvoice(objects), currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total discount</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ '%.2f' % getsumdisc(objects) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getsumdisc(objects), currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total paid</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ '%.2f' % getpaidtotal(objects) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(getpaidtotal(objects), currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total of the day</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ '%.2f' % gettotalofthaday(objects) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(gettotalofthaday(objects), currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index be394ed..1ed8e33 100644 (file)
             <para style="terp_default_Centre_9">[[ formatLang(l.discount) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]] [[o.pricelist_id.currency_id. symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(l.price_subtotal, currency_obj=o.pricelist_id.currency_id) ]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_default_9">Net Total :</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(o.amount_total) ]] [[o.pricelist_id.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(o.amount_total, currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_9">Taxes :</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total:</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total + o.amount_tax) ]] [[o.pricelist_id.currency_id. symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total + o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index fee4731..8d7bf84 100644 (file)
@@ -5,7 +5,7 @@
             <field name="name">report.pos.order.tree</field>
             <field name="model">report.pos.order</field>
             <field name="arch" type="xml">
-                <tree string="Point of Sale Analysis">
+                <tree string="Point of Sale Analysis" create="false">
                     <field name="date" invisible="1"/>
                     <field name="user_id" invisible="1"/>
                     <field name="year" invisible="1"/>
index 757de68..bcc4b9e 100644 (file)
             <para style="terp_default_Right_9">[[ formatLang(line_ids['price_unit']) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line_ids['total']) ]] [[ company.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(line_ids['total'], currency_obj = company.currency_id) ]]</para>
           </td>
 
         </tr>
           <para style="terp_tblheader_Details">Net Total:</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(pos_payment_total(o)) or removeParentNode('blockTable')]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(pos_payment_total(o), currency_obj = company.currency_id) or removeParentNode('blockTable')]]</para>
         </td>
       </tr>
       </blockTable>
index 3105441..1d89d28 100644 (file)
             <para style="terp_default_Right_9">[[ formatLang(line_ids['price_unit']) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(line_ids['total']) ]] [[company.currency_id.symbol]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(line_ids['total'], currency_obj = company.currency_id)]]</para>
           </td>
         </tr>
       </blockTable>
           <para style="terp_tblheader_General_Right">Total:</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(pos_payment_user_total(data['form'])) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(pos_payment_user_total(data['form'], currency_obj = company.currency_id)) or removeParentNode('blockTable')]]</para>
         </td>
       </tr>
     </blockTable>
index 5587388..d7b8b08 100644 (file)
@@ -72,8 +72,7 @@
   <story>
     <para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
     <para style="terp_header_Centre">[[o.user_id.company_id.name]]</para>
-    <para style="terp_default_Centre_9">[[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]</para>
-    <para style="terp_default_Centre_9">[[ address and address.country_id.name ]]</para>
+    <para style="terp_default_Centre_9">[[ address and display_address(address)]]</para>
     <para style="terp_default_Centre_9">Tel : [[ address and address.phone ]]</para>
     <para style="terp_default_Centre_9">User : [[ o.user_id.name ]]</para>
     <para style="terp_default_Centre_9">Shop : [[ o.shop_id.name ]]</para>
           <para style="terp_default_Right_9">[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[company.currency_id.symbol]] <font face="Helvetica">[[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]%) [[company.currency_id.symbol]]</font></para>
+          <para style="terp_default_Right_9">[[o.state=='cancel' and o.statement_ids and '-' or '']][[ formatLang(net(line.id), currency_obj=company.currency_id) ]] <font face="Helvetica">[[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ formatLang(line.discount, currency_obj=company.currency_id) ]])</font></para>
         </td>
       </tr>
     </blockTable>
           <para style="P6a">Taxes :</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_tax]] [[company.currency_id.symbol]]</para>
+          <para style="terp_default_Right_9">[[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_tax, currency_obj=company.currency_id)]]</para>
         </td>
       </tr>
     </blockTable>
           <para style="P6">Total :</para>
         </td>
         <td>
-          <para style="terp_default_Bold_9_Right2">[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total]] [[company.currency_id.symbol]]</para>
+          <para style="terp_default_Bold_9_Right2">[[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_total, currency_obj=company.currency_id)]]</para>
         </td>
       </tr>
     </blockTable>
           </para>
         </td>
         <td>
-          <para style="P8">[[ '%.2f' %(d['amt'] or 0) ]] [[company.currency_id.symbol]]</para>
+          <para style="P8">[[ formatLang(d['amt'] or 0, currency_obj=company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index f3a8cfd..9758e92 100644 (file)
               <para style="terp_default_Right_9">[[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]]</para>
             </td>
             <td>
-              <para style="terp_default_Right_9">[[ formatLang(line_ids['amt']) ]] [[ company.currency_id.symbol ]]</para>
+              <para style="terp_default_Right_9">[[ formatLang(line_ids['amt'], currency_obj = company.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
           <para style="terp_tblheader_General_Right">Total :</para>
         </td>
         <td>
-          <para style="terp_default_Right_9_Bold">[[ formatLang(get_total(statement)) ]] [[ company.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9_Bold">[[ formatLang(get_total(statement), currency_obj = company.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 2a510b1..89daeaa 100644 (file)
@@ -19,7 +19,7 @@
         <field name="inherit_id" ref="base.view_users_form" />
         <field name="arch" type="xml">
             <notebook position="inside">
-                <page string="Point Of Sale">
+                <page string="Point of Sale">
                     <group>
                         <field name="pos_config" />
                         <field name="ean13" />
index a1aed1d..48569fa 100644 (file)
@@ -57,7 +57,7 @@ depending on the product's configuration.
         'company_view.xml',
         'board_mrp_procurement_view.xml',
     ],
-    'demo': ['stock_orderpoint.xml'],
+    'demo': ['stock_orderpoint.xml','procurement_demo.xml'],
     'test': ['test/procurement.yml'],
     'installable': True,
     'auto_install': True,
index 5d81bcb..b21cef3 100644 (file)
@@ -102,7 +102,6 @@ class procurement_order(osv.osv):
         'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', states={'draft':[('readonly',False)], 'confirmed':[('readonly',False)]},
             readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
             " a make to order method."),
-
         'note': fields.text('Note'),
         'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."),
         'state': fields.selection([
@@ -362,11 +361,10 @@ class procurement_order(osv.osv):
         """ Changes procurement state to Running and writes message.
         @return: True
         """
-        message = _('From stock: products assigned.')
+        message = _('Products reserved from stock.')
         self.write(cr, uid, ids, {'state': 'running',
                 'message': message}, context=context)
         self.message_post(cr, uid, ids, body=message, context=context)
-        self.running_send_note(cr, uid, ids, context=context)
         return True
 
     def _check_make_to_stock_service(self, cr, uid, procurement, context=None):
@@ -390,8 +388,6 @@ class procurement_order(osv.osv):
                 order_point_id = self.pool.get('stock.warehouse.orderpoint').search(cr, uid, [('product_id', '=', procurement.product_id.id)], context=context)
                 if not order_point_id and not ok:
                     message = _("Not enough stock and no minimum orderpoint rule defined.")
-                elif not order_point_id:
-                    message = _("No minimum orderpoint rule defined.")
                 elif not ok:
                     message = _("Not enough stock.")
 
@@ -407,7 +403,6 @@ class procurement_order(osv.osv):
         """
         for procurement in self.browse(cr, uid, ids, context=context):
             self.write(cr, uid, [procurement.id], {'state': 'running'})
-        self.running_send_note(cr, uid, ids, context=None)
         return True
 
     def action_produce_assign_product(self, cr, uid, ids, context=None):
@@ -469,7 +464,6 @@ class procurement_order(osv.osv):
         @return: True
         """
         res = self.write(cr, uid, ids, {'state': 'ready'})
-        self.ready_send_note(cr, uid, ids, context=None)
         return res
 
     def action_done(self, cr, uid, ids):
@@ -503,12 +497,6 @@ class procurement_order(osv.osv):
     def confirm_send_note(self, cr, uid, ids, context=None):
         self.message_post(cr, uid, ids, body=_("Procurement <b>confirmed</b>."), context=context)
 
-    def running_send_note(self, cr, uid, ids, context=None):
-        self.message_post(cr, uid, ids, body=_("Procurement set to <b>running</b>."), context=context)
-
-    def ready_send_note(self, cr, uid, ids, context=None):
-        self.message_post(cr, uid, ids, body=_("Procurement set to <b>ready</b>."), context=context)
-
     def cancel_send_note(self, cr, uid, ids, context=None):
         self.message_post(cr, uid, ids, body=_("Procurement <b>cancelled</b>."), context=context)
 
@@ -641,7 +629,18 @@ class stock_warehouse_orderpoint(osv.osv):
         })
         return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context=context)
 
-stock_warehouse_orderpoint()
+class product_template(osv.osv):
+    _inherit="product.template"
+
+    _columns = {
+        'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
+        'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
+        'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
+    }
+    _defaults = {
+        'procure_method': 'make_to_stock',
+        'supply_method': 'buy',
+    }
 
 class product_product(osv.osv):
     _inherit="product.product"
@@ -649,6 +648,6 @@ class product_product(osv.osv):
         'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules'),
     }
 
-product_product()
+
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/procurement/procurement_demo.xml b/addons/procurement/procurement_demo.xml
new file mode 100644 (file)
index 0000000..608eb56
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data noupdate="1">
+
+        <record id="product.product_product_1" model="product.product">
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_2" model="product.product">
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_3" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_4" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+
+        </record>
+        <record id="product.product_product_5" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_6" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_7" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_8" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_9" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+        </record>
+
+        <record id="product.product_product_10" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_11" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_12" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+        </record>
+
+        <record id="product.product_product_13" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_14" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_15" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_16" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_17" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_18" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_19" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_20" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_21" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_22" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_23" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_24" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_25" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_26" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_27" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_28" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_29" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_30" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_31" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_32" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_33" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+        </record>
+
+        <record id="product.product_product_34" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_35" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_36" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_37" model="product.product">
+            <field name="type">product</field>
+            <field name="procure_method">make_to_order</field>
+        </record>
+
+        <record id="product.product_product_38" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_39" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_44" model="product.product">
+            <field name="procure_method">make_to_order</field>
+            <field name="supply_method">produce</field>
+        </record>
+
+        <record id="product.product_product_45" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_46" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_47" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+        <record id="product.product_product_48" model="product.product">
+            <field name="type">product</field>
+        </record>
+
+    </data>
+</openerp>
+    
\ No newline at end of file
index bf73b38..973a094 100644 (file)
             <field name="res_model">stock.warehouse.orderpoint</field>
         </record>
 
+        <record model="ir.ui.view" id="product_template_form_view_procurement">
+            <field name="name">product.template.procurement</field>
+            <field name="model">product.template</field>
+            <field name="inherit_id" ref="product.product_template_form_view"/>
+            <field name="arch" type="xml">
+                <xpath expr="//field[@name='type']" position="after">
+                    <field name="procure_method"/>
+                    <field name="supply_method"/>
+                </xpath>
+            </field>
+        </record>
+
+        <record id="product_search_form_view_procurment" model="ir.ui.view">
+            <field name="name">product.search.procurment.form</field>
+            <field name="model">product.product</field>
+            <field name="inherit_id" ref="product.product_search_form_view"/>
+            <field name="arch" type="xml">
+                <filter name="consumable" position="before">
+                   <filter string="Products" icon="terp-accessories-archiver" domain="[('type','=','product')]" help="Stockable products"/>
+                </filter>
+            </field>
+        </record>
+
         <record model="ir.ui.view" id="product_form_view_procurement_button">
             <field name="name">product.product.procurement</field>
             <field name="model">product.product</field>
                     <button string="Request Procurement" name="%(act_make_procurement)d" type="action"/>
                     <button string="Orderpoints" name="%(product_open_orderpoint)d" type="action"/>
                 </xpath>
+                <xpath expr="//field[@name='cost_method']" position="before">
+                    <field name="procure_method" groups="base.group_user"/>
+                    <field name="supply_method" groups="base.group_user"/> 
+                </xpath>
+                <xpath expr="//group[@name='general']" position="after" >
+                   <group name="procurement_help" class="oe_grey" col="1" groups="base.group_user">
+                       <p attrs="{'invisible': ['|','|',('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_stock')]}">
+                           When you sell this service, nothing special will be triggered
+                           to deliver the customer, as you set the procurement method as
+                           'Make to Stock'.
+                       </p>
+                       <p attrs="{'invisible': ['|','|',('type','&lt;&gt;','product'),('procure_method','&lt;&gt;','make_to_stock')]}">
+                           When you sell this product, OpenERP will <b>use the available
+                           inventory</b> for the delivery order.
+                           <br/><br/>
+                           If there are not enough quantities available, the delivery order
+                           will wait for new products. To fulfill the inventory, you should
+                           create others rules like orderpoints.
+                       </p>
+                       <p attrs="{'invisible': ['|','|',('type','&lt;&gt;','consu'),('procure_method','&lt;&gt;','make_to_stock')]}">
+                           When you sell this product, a delivery order will be created.
+                           OpenERP will consider that the <b>required quantities are always
+                           available</b> as it's a consumable (as a result of this, the quantity
+                           on hand may become negative).
+                       </p>
+                   </group>
+                </xpath>
             </field>
         </record>
 
index d5acee0..6c6c5f2 100644 (file)
@@ -109,8 +109,8 @@ class product_uom(osv.osv):
 
     _order = "name"
     _columns = {
-        'name': fields.char('Name', size=64, required=True, translate=True),
-        'category_id': fields.many2one('product.uom.categ', 'Unit of Measure Category', required=True, ondelete='cascade',
+        'name': fields.char('Unit of Measure', size=64, required=True, translate=True),
+        'category_id': fields.many2one('product.uom.categ', 'Category', required=True, ondelete='cascade',
             help="Quantity conversions may happen automatically between Units of Measure in the same category, according to their respective ratios."),
         'factor': fields.float('Ratio', required=True,digits=(12, 12),
             help='How many times this Unit of Measure is smaller than the reference Unit of Measure in this category:\n'\
@@ -126,7 +126,7 @@ class product_uom(osv.osv):
         'active': fields.boolean('Active', help="By unchecking the active field you can disable a unit of measure without deleting it."),
         'uom_type': fields.selection([('bigger','Bigger than the reference Unit of Measure'),
                                       ('reference','Reference Unit of Measure for this category'),
-                                      ('smaller','Smaller than the reference Unit of Measure')],'Unit of Measure Type', required=1),
+                                      ('smaller','Smaller than the reference Unit of Measure')],'Type', required=1),
     }
 
     _defaults = {
@@ -280,11 +280,8 @@ class product_template(osv.osv):
         'description': fields.text('Description',translate=True),
         'description_purchase': fields.text('Purchase Description',translate=True),
         'description_sale': fields.text('Sale Description',translate=True),
-        'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock."),
-        'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
-        'sale_delay': fields.float('Customer Lead Time', help="This is the average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
+        'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
         'produce_delay': fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. This is only for the production order and, if it is a multi-level bill of material, it's only for the level of this product. Different lead times will be summed for all levels and purchase orders."),
-        'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
         'rental': fields.boolean('Can be Rent'),
         'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
         'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
@@ -296,7 +293,6 @@ class product_template(osv.osv):
             help="Standard Price: the cost price is fixed and recomputed periodically (usually at the end of the year), Average Price: the cost price is recomputed at each reception of products."),
         'warranty': fields.float('Warranty'),
         'sale_ok': fields.boolean('Can be Sold', help="Determines if the product can be visible in the list of product within a selection from a sale order line."),
-        'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
         'state': fields.selection([('',''),
             ('draft', 'In Development'),
             ('sellable','Normal'),
@@ -309,11 +305,8 @@ class product_template(osv.osv):
         'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'),
             help='Coefficient to convert Unit of Measure to UOS\n'
             ' uos = uom * coeff'),
-        'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type', required=True),
+        'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'),
         'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Partners'),
-        'loc_rack': fields.char('Rack', size=16),
-        'loc_row': fields.char('Row', size=16),
-        'loc_case': fields.char('Case', size=16),
         'company_id': fields.many2one('res.company', 'Company', select=1),
     }
 
@@ -351,21 +344,17 @@ class product_template(osv.osv):
 
     _defaults = {
         'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'product.template', context=c),
-        'list_price': lambda *a: 1,
-        'cost_method': lambda *a: 'standard',
-        'supply_method': lambda *a: 'buy',
-        'standard_price': lambda *a: 0.0,
-        'sale_ok': lambda *a: 1,
-        'sale_delay': lambda *a: 7,
-        'produce_delay': lambda *a: 1,
-        'purchase_ok': lambda *a: 1,
-        'procure_method': lambda *a: 'make_to_stock',
+        'list_price': 1,
+        'cost_method': 'standard',
+        'standard_price': 0.0,
+        'sale_ok': 1,
+        'produce_delay': 1,
         'uom_id': _get_uom_id,
         'uom_po_id': _get_uom_id,
-        'uos_coeff' : lambda *a: 1.0,
-        'mes_type' : lambda *a: 'fixed',
+        'uos_coeff' : 1.0,
+        'mes_type' : 'fixed',
         'categ_id' : _default_category,
-        'type' : lambda *a: 'consu',
+        'type' : 'consu',
     }
 
     def _check_uom(self, cursor, user, ids, context=None):
index 1974acc..8e5280d 100644 (file)
@@ -197,7 +197,6 @@ parameter) will see those record just disappear.
             <field name="name">Service</field>
             <field name="categ_id" ref="product.product_category_all"/>
             <field name="type">service</field>
-            <field eval="False" name="purchase_ok"/>
         </record>
     </data>
 </openerp>
index 66b86fc..14477d2 100644 (file)
@@ -70,8 +70,6 @@
             <field name="standard_price">20.5</field>
             <field name="list_price">30.75</field>
             <field name="type">service</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
             <field name="uom_id" ref="product_uom_hour"/>
             <field name="uom_po_id" ref="product_uom_hour"/>
             <field name="description">This type of service include basic monitoring of products.</field>
@@ -84,8 +82,6 @@
             <field name="standard_price">25.5</field>
             <field name="list_price">38.25</field>
             <field name="type">service</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
             <field name="uom_id" ref="product_uom_hour"/>
             <field name="uom_po_id" ref="product_uom_hour"/>
             <field name="description">This type of service include assistance for security questions, system configuration requirements, implementation or special needs.</field>
@@ -97,9 +93,7 @@
             <field name="categ_id" ref="product_category_4"/>
             <field name="list_price">450.0</field>
             <field name="standard_price">300.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="sale_delay">4.0</field>
@@ -115,9 +109,8 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_4"/>
             <field name="standard_price">500.0</field>
             <field name="list_price">750.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
+
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="sale_delay">4.0</field>
@@ -133,9 +126,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_4"/>
             <field name="standard_price">600.0</field>
             <field name="list_price">900.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="sale_delay">7.0</field>
@@ -148,7 +139,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">800.0</field>
             <field name="list_price">1200.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -158,7 +149,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">880.0</field>
             <field name="list_price">1350.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -168,7 +159,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">10.0</field>
             <field name="list_price">13.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -178,8 +169,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">10.0</field>
             <field name="list_price">13.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -189,7 +179,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">12.50</field>
             <field name="list_price">14</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -199,7 +189,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">14</field>
             <field name="list_price">16.50</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -209,8 +199,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">18</field>
             <field name="list_price">12.50</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -220,7 +209,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">78.0</field>
             <field name="list_price">85.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -230,7 +219,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">87.0</field>
             <field name="list_price">95.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -240,7 +229,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">80.0</field>
             <field name="list_price">85.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -250,9 +239,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">20.0</field>
             <field name="list_price">25.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -262,7 +249,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">860.0</field>
             <field name="list_price">975.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -272,9 +259,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">1020.0</field>
             <field name="list_price">1150.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -284,9 +269,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">1100.0</field>
             <field name="list_price">1250.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">On demand hard-disk having capacity based on requirement.</field>
@@ -297,7 +280,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">1700.0</field>
             <field name="list_price">1950.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -307,7 +290,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">1790.0</field>
             <field name="list_price">2000.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -317,7 +300,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">2010.0</field>
             <field name="list_price">2100.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -327,7 +310,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">1910.0</field>
             <field name="list_price">1980.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -337,7 +320,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_8"/>
             <field name="standard_price">876.0</field>
             <field name="list_price">885.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -347,7 +330,7 @@ HDD SH-1</field>
             <field name="categ_id" ref="product_category_4"/>
             <field name="standard_price">2870.0</field>
             <field name="list_price">2950.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">17" Monitor
@@ -361,7 +344,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_4"/>
             <field name="standard_price">3000.0</field>
             <field name="list_price">3245.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">17" Monitor
@@ -375,9 +358,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_4"/>
             <field name="standard_price">3300.0</field>
             <field name="list_price">3645.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">Custom Laptop based on customer's requirement.</field>
@@ -388,7 +369,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">390.0</field>
             <field name="list_price">405.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -399,7 +380,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">90.0</field>
             <field name="list_price">100.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -410,7 +391,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">126.0</field>
             <field name="list_price">145.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -420,7 +401,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">134.0</field>
             <field name="list_price">150.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">.</field>
@@ -431,7 +412,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">57.0</field>
             <field name="list_price">62.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">Hands free headset for laptop PC with in-line microphone and headphone plug.</field>
@@ -442,8 +423,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">60.0</field>
             <field name="list_price">65.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">Headset for laptop PC with USB connector.</field>
@@ -455,7 +435,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">38.0</field>
             <field name="list_price">45.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -466,7 +446,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">18.40</field>
             <field name="list_price">20.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_dozen"/>
             <field name="uom_po_id" ref="product_uom_dozen"/>
         </record>
@@ -477,7 +457,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_7"/>
             <field name="standard_price">21.60</field>
             <field name="list_price">24.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_dozen"/>
             <field name="uom_po_id" ref="product_uom_dozen"/>
         </record>
@@ -488,8 +468,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">4258.0</field>
             <field name="list_price">4410.0</field>
-            <field name="type">product</field>
-            <field name="procure_method">make_to_order</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description">All in one hi-speed printer with fax and scanner.</field>
@@ -501,7 +480,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">60.0</field>
             <field name="list_price">65.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -512,7 +491,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">66.0</field>
             <field name="list_price">70.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -569,8 +548,6 @@ QWERTY keyboard</field>
             <field name="standard_price">155.0</field>
             <field name="list_price">173.0</field>
             <field name="type">consu</field>
-            <field name="procure_method">make_to_order</field>
-            <field name="supply_method">produce</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
             <field name="description_sale">Full featured image editing software.</field>
@@ -582,7 +559,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">55.0</field>
             <field name="list_price">60.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -593,7 +570,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">35.0</field>
             <field name="list_price">40.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -604,7 +581,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">55.0</field>
             <field name="list_price">70.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
@@ -615,7 +592,7 @@ QWERTY keyboard</field>
             <field name="categ_id" ref="product_category_6"/>
             <field name="standard_price">13.0</field>
             <field name="list_price">18.0</field>
-            <field name="type">product</field>
+            <field name="type">consu</field>
             <field name="uom_id" ref="product_uom_unit"/>
             <field name="uom_po_id" ref="product_uom_unit"/>
         </record>
index 8c19aee..748d6c5 100644 (file)
                 <search string="Product">
                    <field name="name" string="Product" filter_domain="['|',('name','ilike',self),('default_code','ilike',self)]"/>
                    <filter string="Services" icon="terp-accessories-archiver" domain="[('type','=','service')]"/>
-                   <filter string="Products" icon="terp-accessories-archiver" domain="['|',('type','=','product'),('type','=','consu')]" help="Both stockable and consumable products"/>
+                   <filter string="Consumable" name="consumable" icon="terp-accessories-archiver" domain="[('type','=','consu')]" help="Consumable products"/>
                    <separator/>
-                   <filter name="filter_to_purchase" string="To Purchase" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
                    <filter string="Can be Sold" name="filter_to_sell" icon="terp-accessories-archiver-minus" domain="[('sale_ok','=',1)]"/>
-                   <filter name="filter_to_purchase" string="Can be Purchased" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
                    <field name="categ_id" operator="child_of"/>
                    <group expand="0" string="Context...">
                        <field name="pricelist_id" context="{'pricelist': self}" groups="product.group_sale_pricelist"/>
@@ -60,7 +58,7 @@
             <field name="arch" type="xml">
                 <form string="Product" version="7.0">
                     <sheet>
-                        <field name="image_medium" widget="image" class="oe_avatar oe_right"/>
+                        <field name="image_medium" widget="image" class="oe_avatar oe_left"/>
                         <div class="oe_title">
                             <div class="oe_edit_only">
                                 <label for="name" string="Product Name"/>
@@ -73,8 +71,6 @@
                             <div name="options" groups="base.group_user">
                                 <field name="sale_ok"/>
                                 <label for="sale_ok"/>
-                                <field name="purchase_ok"/>
-                                <label for="purchase_ok"/>
                             </div>
                         </div>
                         <div class="oe_right oe_button_box" name="buttons">
                             </page>
                             <page string="Procurements" groups="base.group_user">
                                 <group name="procurement">
-                                    <group>
-                                        <field name="procure_method" groups="base.group_user"/>
-                                        <field name="supply_method" groups="base.group_user" invisible="1"/>
+                                    <group name="general">
                                         <field name="cost_method" groups="product.group_costing_method"/>
                                         <field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
                                     </group>
-                                    <group name="procurement_help" class="oe_grey" col="1" groups="base.group_user">
-                                        <p attrs="{'invisible': [('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_stock')]}">
-                                            When you sell this service, nothing special will be trigered
-                                            to deliver the customer, as you set the procurement method as
-                                            'Make to Stock'.
-                                        </p>
-                                        <p attrs="{'invisible': [('type','&lt;&gt;','product'),('procure_method','&lt;&gt;','make_to_stock')]}">
-                                            When you sell this product, OpenERP will <b>use the available
-                                            inventory</b> for the delivery order.
-                                            <br/><br/>
-                                            If there are not enough quantities available, the delivery order
-                                            will wait for new products. To fulfill the inventory, you should
-                                            create others rules like orderpoints.
-                                        </p>
-                                        <p attrs="{'invisible': [('type','&lt;&gt;','consu'),('procure_method','&lt;&gt;','make_to_stock')]}">
-                                            When you sell this product, a delivery order will be created.
-                                            OpenERP will consider that the <b>required quantities are always
-                                            available</b> as it's a consumable (as a result of this, the quantity
-                                            on hand may become negative).
-                                        </p>
-                                    </group>
-                                    <group groups="product.group_uom">
+                                    <group name="procurement_uom" groups="product.group_uom" string="Purchase">
                                         <field name="uom_po_id"/>
                                     </group>
                                 </group>
-                                <separator string="Notes for Suppliers"/>
+                                <separator string="Description for Suppliers"/>
                                 <field name="description_purchase" placeholder="This note will be displayed on requests for quotation..."/>
                             </page>
                             <page string="Inventory" groups="base.group_user">
                                         <field name="state"/>
                                         <field name="product_manager"/>
                                     </group>
-                                    <group name="store" string="Storage Localisation">
-                                        <field name="company_id" groups="base.group_multi_company" widget="selection"/>
-                                        <field name="loc_rack" attrs="{'invisible':[('type','=','service')]}"/>
-                                        <field name="loc_row" attrs="{'invisible':[('type','=','service')]}"/>
-                                        <field name="loc_case" attrs="{'invisible':[('type','=','service')]}"/>
-                                    </group>
-                                    <group groups="product.group_stock_packaging" string="Weights">
+                                    <group name="Weights" groups="product.group_stock_packaging" string="Weights">
                                         <field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
                                         <field name="weight" attrs="{'readonly':[('type','=','service')]}"/>
                                         <field name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
                             <page string="Sales" attrs="{'readonly':[('sale_ok','=',0)]}">
                                 <group name="sale">
                                     <group string="Sale Conditions">
-                                        <label for="sale_delay"/>
-                                        <div>
-                                            <field name="sale_delay" class="oe_inline"/> days
-                                        </div>
                                         <label for="warranty"/>
                                         <div>
                                             <field name="warranty" class="oe_inline"/> months
                                         <field name="name"/>
                                     </form>
                                 </field>
-                                <separator string="Notes on Quotations"/>
+                                <separator string="Description for Quotations"/>
                                 <field name="description_sale" placeholder="note to be displayed on quotations..."/>
                             </page>
                         </notebook>
                 <tree string="Units of Measure">
                     <field name="name"/>
                     <field name="category_id"/>
-                    <field name="factor"/>
                 </tree>
             </field>
         </record>
                         <group>
                             <field name="name"/>
                             <field name="category_id"/>
-                            <field name="active"/>
+                            <field name="uom_type" on_change="onchange_type(uom_type)"/>
+                            <label for="factor"/>
+                            <div>
+                                <field name="factor" attrs="{'invisible':[('uom_type','!=','smaller')]}"/>
+                                <field name="factor_inv" attrs="{'invisible':[('uom_type','!=','bigger')]}"/>
+                                <p attrs="{'invisible':[('uom_type','!=','smaller')]}" class="oe_grey">
+                                    e.g: 1 * (reference unit) = ratio * (this unit)
+                                </p>
+                                <p attrs="{'invisible':[('uom_type','!=','bigger')]}" class="oe_grey">
+                                    e.g: 1 * (this unit) = ratio * (reference unit)
+                                </p>
+                            </div>
                         </group>
                         <group>
-                            <field name="uom_type" on_change="onchange_type(uom_type)"/>
-                            <p attrs="{'invisible':[('uom_type','!=','smaller')]}" colspan="2">
-                                e.g: 1 * (reference unit) = ratio * (this unit)
-                            </p>
-                            <p attrs="{'invisible':[('uom_type','!=','bigger')]}" colspan="2">
-                                e.g: 1 * (this unit) = ratio * (reference unit)
-                            </p>
+                            <field name="active"/>
                             <field name="rounding"/>
-                            <field name="factor" attrs="{'invisible':[('uom_type','!=','smaller')]}"/>
-                            <field name="factor_inv" attrs="{'invisible':[('uom_type','!=','bigger')]}"/>
                         </group>
                     </group>
                 </form>
                         <group>
                             <group string="Product Type">
                                 <field name="sale_ok"/>
-                                <field name="purchase_ok"/>
                             </group>
                             <group string="Procurement">
                                 <field name="type"/>
-                                <field name="procure_method"/>
-                                <field name="supply_method"/>
                             </group>
 
                             <group string="Base Prices">
                                 <field digits="(14, 3)" name="volume" attrs="{'readonly':[('type','=','service')]}"/>
                                 <field digits="(14, 3)" name="weight" attrs="{'readonly':[('type','=','service')]}"/>
                                 <field digits="(14, 3)" name="weight_net" attrs="{'readonly':[('type','=','service')]}"/>
-                            </group>
+                            </group> 
 
                             <group name="status" string="Status">
                                 <field name="categ_id"/>
                         <page string="Procurement &amp; Locations">
                             <group>
                                 <group name="delay" string="Delays">
-                                    <field name="sale_delay" attrs="{'readonly':[('sale_ok','=',0)]}"/>
                                     <label for="produce_delay"/>
                                     <div>
                                         <field name="produce_delay" class="oe_inline"/> days
                                     </div>
                                     <field name="warranty"/>
                                 </group>
-                                <group name="store" string="Storage Localisation">
-                                    <field name="loc_rack"/>
-                                    <field name="loc_row"/>
-                                    <field name="loc_case"/>
-                                </group>
                             </group>
 
                         </page>
index 88ea6f3..d6dfb22 100644 (file)
@@ -19,9 +19,9 @@
         <record model="ir.ui.view" id="view_product_form_expiry">
             <field name="name">product.normal.form</field>
             <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view" />
+            <field name="inherit_id" ref="stock.view_normal_procurement_locations_form" />
             <field name="arch" type="xml">
-                <group name="inventory">
+                <group name="Weights" position="after">
                     <group string="Dates">
                         <field name="life_time" />
                         <field name="use_time" />
index 4f1d282..9a022ff 100644 (file)
@@ -510,8 +510,7 @@ def Project():
                           model_name=vals.get('alias_model', 'project.task'),
                           context=context)
             vals['alias_id'] = alias_id
-        if vals.get('partner_id', False):
-            vals['type'] = 'contract'
+        vals['type'] = 'contract'
         project_id = super(project, self).create(cr, uid, vals, context)
         mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'project_id': project_id} }, context)
         self.create_send_note(cr, uid, [project_id], context=context)
@@ -1426,7 +1425,9 @@ class project_task_history_cumulative(osv.osv):
     }
 
     def init(self, cr):
-        cr.execute(""" CREATE OR REPLACE VIEW project_task_history_cumulative AS (
+        tools.drop_view_if_exists(cr, 'project_task_history_cumulative')
+
+        cr.execute(""" CREATE VIEW project_task_history_cumulative AS (
             SELECT
                 history.date::varchar||'-'||history.history_id::varchar AS id,
                 history.date AS end_date,
index 03c0ee2..4c6d3b6 100644 (file)
@@ -63,7 +63,7 @@
             <field name="arch" type="xml">
                 <form string="Project" version="7.0">
                 <header>
-                    <button name="set_done" string="Done" type="object" states="open,pending"/>
+                    <button name="set_done" string="Close Project" type="object" states="open,pending"/>
                     <button name="set_open" string="Re-open project" type="object" states="pending" class="oe_highlight"/>
                     <button name="set_open" string="Re-open project" type="object" states="cancelled,close"/>
                     <button name="set_pending" string="Pending" type="object" states="open"/>
index 1d60479..10f3f4a 100644 (file)
@@ -10,7 +10,7 @@
             <field name="name">report.project.task.user.tree</field>
             <field name="model">report.project.task.user</field>
             <field name="arch" type="xml">
-                <tree string="Tasks Analysis">
+                <tree string="Tasks Analysis" create="false">
                     <field name="name" invisible="1"/>
                     <field name="project_id" invisible="1"/>
                     <field name="user_id" invisible="1"/>
index f90f349..6bee4e3 100644 (file)
@@ -6,7 +6,7 @@
             <field name="name">project.issue.report.tree</field>
             <field name="model">project.issue.report</field>
             <field name="arch" type="xml">
-                <tree string="Issues Analysis">
+                <tree string="Issues Analysis" create="false">
                     <field name="name" invisible="1"/>
                     <field name="month" invisible="1"/>
                     <field name="project_id" invisible="1"/>
index 51de9dd..be6bae8 100644 (file)
                 </field>
             </field>
         </record>
-        <record id="product.product_normal_form_supply_view" model="ir.ui.view">
+        <record id="product_product_normal_form_supply_view" model="ir.ui.view">
             <field name="name">product.normal.form.project_mrp.inherit</field>
             <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view"/>
+            <field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
             <field name="arch" type="xml">
                 <xpath expr="//field[@name='supply_method']" position="attributes">
                     <attribute name="invisible">False</attribute>
                 </xpath>
                 <group name="procurement_help" position="inside">
-                    <p attrs="{'invisible': [('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','produce')]}">
+                    <p attrs="{'invisible': ['|','|',('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','produce')]}">
                         When you sell this service to a customer, <b>a task</b> will be 
                         created to follow up the job to do. This task will appear
                         in the project related to the contract of the sale order.
index ae5e1cc..6948f54 100644 (file)
@@ -20,6 +20,7 @@
 ##############################################################################
 
 from osv import fields, osv
+from tools.translate import _
 
 class procurement_order(osv.osv):
     _name = "procurement.order"
@@ -83,10 +84,15 @@ class procurement_order(osv.osv):
                 'project_id':  project and project.id or False,
                 'company_id': procurement.company_id.id,
             },context=context)
-            self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running', 'message':'from project: task created.'}, context=context)
-        self.running_send_note(cr, uid, ids, context=None)
+            self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running', 'message':_('Task created.')}, context=context)            
+        self.project_task_create_note(cr, uid, ids, context=context)
         return task_id
 
+    def project_task_create_note(self, cr, uid, ids, context=None):
+        for procurement in self.browse(cr, uid, ids, context=context):
+            body = _("Task created")
+            self.message_post(cr, uid, [procurement.id], body=body, context=context)
+
 procurement_order()
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index c0516d0..db6ed8b 100644 (file)
@@ -1084,9 +1084,14 @@ class procurement_order(osv.osv):
             }
             res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=new_context)
             self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
-            self.running_send_note(cr, uid, [procurement.id], context=context)
+        self.purchase_order_create_note(cr, uid, ids, context=context)
         return res
 
+    def purchase_order_create_note(self, cr, uid, ids, context=None):
+        for procurement in self.browse(cr, uid, ids, context=context):
+            body = _("Draft Purchase Order created")
+            self.message_post(cr, uid, [procurement.id], body=body, context=context)
+
 procurement_order()
 
 class mail_mail(osv.osv):
@@ -1101,4 +1106,16 @@ class mail_mail(osv.osv):
 
 mail_mail()
 
+class product_template(osv.osv):
+    _name = 'product.template'
+    _inherit = 'product.template'
+    _columns = {
+        'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
+    }
+    _defaults = {
+        'purchase_ok': 1,
+    }
+
+product_template()
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 17f51bb..c68ee87 100644 (file)
@@ -14,6 +14,9 @@
             <field eval="80.0" name="schedule_range"/>
         </record>
 
+        <record id="product.product_product_consultant" model="product.product">
+            <field eval="False" name="purchase_ok"/>
+        </record>
     </data>
 </openerp>
 
index 446c175..4d273d9 100644 (file)
             <field name="arch" type="xml">
                 <form string="Purchase Order" version="7.0">
                 <header>
-                    <button name="purchase_confirm" states="draft,sent" string="Confirm Order" class="oe_highlight"/>
-                    <button name="wkf_send_rfq" states="draft" string="Send RFQ" type="object" context="{'send_rfq':True}"/>
+                    <button name="wkf_send_rfq" states="draft" string="Send RFQ" type="object" context="{'send_rfq':True}" class="oe_highlight"/>
+                    <button name="purchase_confirm" states="draft" string="Confirm Order"/>
+                    <button name="purchase_confirm" states="sent" string="Confirm Order" class="oe_highlight"/>
                     <button name="wkf_send_rfq" states="confirmed" string="Resend Purchase Order" type="object" class="oe_highlight"/>
                     <button name="action_cancel" states="except_picking,except_invoice" string="Cancel" type="object" />
                     <button name="picking_ok" states="except_picking" string="Manually Corrected"/>
             <field name="model">product.product</field>
             <field name="inherit_id" ref="product.product_normal_form_view"/>
             <field name="arch" type="xml">
+                <div name="options" position="inside">
+                    <field name="purchase_ok"/>
+                    <label for="purchase_ok"/>
+                </div>
                 <group name="procurement" position="after">
                      <separator string="Suppliers"/>
                      <field name="seller_ids" context="{'uom_id': uom_id}"/>
                 </group>
+            </field>
+        </record>
+
+        <record id="product_product_normal_form_procurement_help_view" model="ir.ui.view">
+            <field name="name">product.normal.form.procurement.help.inherit</field>
+            <field name="model">product.product</field>
+            <field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
+            <field name="arch" type="xml">
                 <group name="procurement_help" position="inside">
-                    <p attrs="{'invisible': [('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','buy')]}">
+                    <p attrs="{'invisible': ['|','|',('type','&lt;&gt;','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','buy')]}">
                         When you sell this service to a customer, <b>a draft purchase order</b>
                         will be created in order to subcontract the job 
                         <i attrs="{'invisible': [('seller_id','=',False)]}">to 
                         <field name="seller_id" class="oe_inline"/></i>.
                     </p>
-                    <p attrs="{'invisible': [('type','=','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','buy')]}">
+                    <p attrs="{'invisible': ['|','|',('type','=','service'),('procure_method','&lt;&gt;','make_to_order'),('supply_method','&lt;&gt;','buy')]}">
                         When you sell this product, OpenERP will trigger <b>a draft
                         purchase order</b> to buy the required quantities to the supplier.
                         The delivery order will be ready after having received the
                 </group>
             </field>
         </record>
+
+        <record id="product_search_form_view_purchase" model="ir.ui.view">
+            <field name="name">product.search.purchase.form</field>
+            <field name="model">product.product</field>
+            <field name="inherit_id" ref="product.product_search_form_view"/>
+            <field name="arch" type="xml">
+                <filter name="filter_to_sell" position="before">
+                    <filter name="filter_to_purchase" string="To Purchase" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
+                </filter>
+                <filter name="filter_to_sell" position="after">
+                   <filter name="filter_to_purchase" string="Can be Purchased" icon="terp-accessories-archiver+" domain="[('purchase_ok', '=', 1)]"/>
+                </filter>
+            </field>
+        </record>
+
+        <record id="view_template_purchase_ok_form" model="ir.ui.view">
+            <field name="name">product.template.purchase.ok.form.inherit</field>
+            <field name="model">product.template</field>
+            <field name="inherit_id" ref="product.product_template_form_view"/>
+            <field name="arch" type="xml">
+                <field name="sale_ok" position="after">
+                    <field name="purchase_ok"/>
+                </field>
+            </field>
+        </record>
+  
+        <record id="view_product_account_purchase_ok_form" model="ir.ui.view">
+            <field name="name">product.account.purchase.ok.form.inherit</field>
+            <field name="model">product.product</field>
+            <field name="inherit_id" ref="account.product_normal_form_view"/>
+            <field name="arch" type="xml">
+                <xpath expr="//field[@name='property_account_expense']" position="replace" >
+                     <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />
+                </xpath>
+                <xpath expr="//field[@name='supplier_taxes_id']" position="replace" >
+                     <field name="supplier_taxes_id" colspan="2" widget="many2many_tags" attrs="{'readonly':[('purchase_ok','=',0)]}"/>
+                </xpath>
+            </field>
+        </record>
+
     </data>
 </openerp>
index 8068524..909663f 100644 (file)
@@ -16,7 +16,7 @@
             <field name="name">purchase.order.tree</field>
             <field name="model">purchase.report</field>
             <field name="arch" type="xml">
-                <tree string="Purchase Orders Statistics">
+                <tree string="Purchase Orders Statistics" create="false">
                     <field name="date" invisible="1"/>
                     <field name="date_approve" invisible="1"/>
                     <field name="expected_date" invisible="1"/>
index 80bdd9a..c4c2702 100644 (file)
     <record model="ir.ui.view" id="product_normal_form_view_inherit">
         <field name="name">product.form.inherit</field>
         <field name="model">product.product</field>
-        <field name="inherit_id" ref="product.product_normal_form_view"/>
+        <field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
         <field name="arch" type="xml">
             <field name="procure_method" position="before">
                 <field name="purchase_requisition"/>
index c07bd06..fc410e0 100644 (file)
             <para style="terp_default_Centre_9">[[ l.discount and formatLang (l.discount) or '' ]] </para>
           </td>
           <td>
-            <para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]] [[ o.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_9">[[ formatLang(l.price_subtotal, currency_obj=o.currency_id) ]]</para>
           </td>
         </tr>
         <tr>
           <para style="terp_default_9">Total (excl. taxes):</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]] [[ o.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, currency_obj=o.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_9">Taxes:</para>
         </td>
         <td>
-          <para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
+          <para style="terp_default_Right_9">[[ formatLang(o.amount_tax, currency_obj=o.currency_id) ]]</para>
         </td>
       </tr>
       <tr>
           <para style="terp_default_Bold_9">Total (inclu. taxes):</para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(o.amount_total) ]] [[ o.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(o.amount_total, currency_obj=o.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
             <para style="terp_default_8">[[ t.name ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account'), currency_obj = o.currency_id) ]]</para>
           </td>
           <td>
-            <para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
+            <para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</para>
           </td>
           <td>
             <para style="terp_default_8">
index 8d8da4a..bcbd19d 100644 (file)
@@ -75,7 +75,7 @@
             <field name="name">report.intrastat.view</field>
             <field name="model">report.intrastat</field>
             <field name="arch" type="xml">
-                <tree string="Intrastat Data">
+                <tree string="Intrastat Data" create="false">
                     <field name="name" />
                     <field name="month"/>
                     <field name="code"/>
index a7153f5..8f725a9 100644 (file)
@@ -7,7 +7,7 @@
         <field name="name">sale.report.tree</field>
         <field name="model">sale.report</field>
         <field name="arch" type="xml">
-            <tree string="Sales Analysis">
+            <tree string="Sales Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="user_id" invisible="1"/>
                 <field name="year" invisible="1"/>
index 843e1fd..4f1a7ce 100644 (file)
@@ -48,9 +48,6 @@ class sale_configuration(osv.osv_memory):
         'group_uom':fields.boolean("Allow using different units of measures",
             implied_group='product.group_uom',
             help="""Allows you to select and maintain different units of measure for products."""),
-        'group_sale_delivery_address': fields.boolean("Allow a different address for delivery and invoicing ",
-            implied_group='sale.group_delivery_invoice_address',
-            help="Allows you to specify different delivery and invoice addresses on a sale order."),
         'group_discount_per_so_line': fields.boolean("Allow setting a discount on the sale order lines",
             implied_group='sale.group_discount_per_so_line',
             help="Allows you to apply some discount per sale order line."),
@@ -125,7 +122,7 @@ class sale_configuration(osv.osv_memory):
 class account_config_settings(osv.osv_memory):
     _inherit = 'account.config.settings'
     _columns = {
-        'module_sale_analytic_plans': fields.boolean('Several analytic accounts on sales',
+        'module_sale_analytic_plans': fields.boolean('Use multiple analytic accounts on sales',
             help="""This allows install module sale_analytic_plans."""),
         'group_analytic_account_for_sales': fields.boolean('Analytic accounting for sales',
             implied_group='sale.group_analytic_accounting',
index 6150d4c..daf396d 100644 (file)
                     <group>
                         <label for="id" string="Invoicing Process"/>
                         <div>
+                            <div name="group_invoice_so_lines">
+                                <field name="group_invoice_so_lines" class="oe_inline"/>
+                                <label for="group_invoice_so_lines"/>
+                            </div>
                             <div name="timesheet">
                                 <field name="timesheet" class="oe_inline" on_change="onchange_timesheet(timesheet)"/>
                                 <label for="timesheet"/>
                 </div>
                 <div name="Customer Features" position="inside">
                     <div>
-                        <field name="group_sale_delivery_address" class="oe_inline"/>
-                        <label for="group_sale_delivery_address"/>
-                    </div>
-                    <div>
                         <field name="group_sale_pricelist" class="oe_inline"/>
                         <label for="group_sale_pricelist"/>
                     </div>
index 9ba6c43..a2ee88a 100644 (file)
@@ -194,7 +194,7 @@ class sale_order(osv.osv):
         'user_id': fields.many2one('res.users', 'Salesperson', states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True),
         'partner_id': fields.many2one('res.partner', 'Customer', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, required=True, change_default=True, select=True),
         'partner_invoice_id': fields.many2one('res.partner', 'Invoice Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Invoice address for current sales order."),
-        'partner_shipping_id': fields.many2one('res.partner', 'Shipping Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Shipping address for current sales order."),
+        'partner_shipping_id': fields.many2one('res.partner', 'Delivery Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, help="Delivery address for current sales order."),
         'order_policy': fields.selection([
                 ('manual', 'On Demand'),
             ], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
@@ -710,7 +710,7 @@ class sale_order_line(osv.osv):
     _description = 'Sales Order Line'
     _columns = {
         'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}),
-        'name': fields.text('Product Description', size=256, required=True, select=True, readonly=True, states={'draft': [('readonly', False)]}),
+        'name': fields.text('Description', size=256, required=True, select=True, readonly=True, states={'draft': [('readonly', False)]}),
         'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines."),
         'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
         'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
@@ -751,13 +751,13 @@ class sale_order_line(osv.osv):
         if (line.order_id.invoice_quantity=='order'):
             if line.product_uos:
                 return line.product_uos_qty or 0.0
-            return line.product_uom_qty
+        return line.product_uom_qty
 
     def _get_line_uom(self, cr, uid, line, context=None):
         if (line.order_id.invoice_quantity=='order'):
             if line.product_uos:
                 return line.product_uos.id
-            return line.product_uom.id
+        return line.product_uom.id
 
     def _prepare_order_line_invoice_line(self, cr, uid, line, account_id=False, context=None):
         """Prepare the dict of values to create the new invoice line for a
index 8b89e80..2ba00a7 100644 (file)
                     </h1>
                     <group>
                         <group>
-                            <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1}"/>
-                            <field name="partner_invoice_id" groups="sale.group_delivery_invoice_address"/>
-                            <field name="partner_shipping_id" groups="sale.group_delivery_invoice_address"/>
+                            <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/>
+                            <field name="partner_invoice_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'invoice'}"/>
+                            <field name="partner_shipping_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'delivery'}"/>
                             <field name="project_id" context="{'partner_id':partner_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/>
                         </group>
                         <group>
index e54ba15..665474c 100644 (file)
@@ -9,8 +9,8 @@
             <field name="arch" type="xml">
                 <data>
                     <xpath expr="/form/header/button[@name='case_mark_lost']" position="after">
-                        <button states="done" string="Convert to Quotation" name="%(action_crm_make_sale)d" type="action" class="oe_highlight"/>
-                        <button states="draft,open,pending" string="Convert to Quotation" name="%(action_crm_make_sale)d" type="action"/>
+                        <button states="done" string="Create Quotation" name="%(action_crm_make_sale)d" type="action"/>
+                        <button states="draft,open,pending" string="Convert to Quotation" name="%(action_crm_make_sale)d" type="action" class="oe_highlight"/>
                     </xpath>
                 </data>
             </field>
index 9b393b6..bb2f78f 100644 (file)
@@ -32,7 +32,7 @@ Price and Cost Price.
     'author':'OpenERP SA',
     'images':['images/sale_margin.jpeg'],
     'depends':['sale_stock'],
-    'demo':[],
+    'demo':['sale_margin_demo.xml'],
     'test': ['test/sale_margin.yml'],
     'data':['security/ir.model.access.csv','sale_margin_view.xml'],
     'auto_install': False,
diff --git a/addons/sale_margin/sale_margin_demo.xml b/addons/sale_margin/sale_margin_demo.xml
new file mode 100644 (file)
index 0000000..a41f053
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data noupdate="1">
+
+        <record id="sale.sale_order_line_1" model="sale.order.line">
+            <field name="purchase_price">2870.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_2" model="sale.order.line">
+            <field name="purchase_price">126.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_3" model="sale.order.line">
+            <field name="purchase_price">60.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_12" model="sale.order.line">
+            <field name="purchase_price">390.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_13" model="sale.order.line">
+            <field name="purchase_price">21.60</field>
+        </record>
+
+        <record id="sale.sale_order_line_14" model="sale.order.line">
+            <field name="purchase_price">4258.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_16" model="sale.order.line">
+            <field name="purchase_price">2870.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_17" model="sale.order.line">
+            <field name="purchase_price">155.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_18" model="sale.order.line">
+            <field name="purchase_price">35.00</field>
+        </record>
+
+        <record id="sale.sale_order_line_19" model="sale.order.line">
+            <field name="purchase_price">13.00</field>
+        </record>
+
+    </data>
+</openerp>
index 22b4783..43e1cfc 100644 (file)
@@ -27,6 +27,9 @@ class sale_configuration(osv.osv_memory):
     _inherit = 'sale.config.settings'
 
     _columns = {
+        'group_sale_delivery_address': fields.boolean("Allow a different address for delivery and invoicing ",
+            implied_group='sale.group_delivery_invoice_address',
+            help="Allows you to specify different delivery and invoice addresses on a sale order."),
         'group_invoice_deli_orders': fields.boolean('Generate invoices after and based on delivery orders',
             implied_group='sale_stock.group_invoice_deli_orders',
             help="To allow your salesman to make invoices for Delivery Orders using the menu 'Deliveries to Invoice'."),
index 1f5380b..aa15be1 100644 (file)
@@ -9,11 +9,19 @@
              <field name="inherit_id" ref="sale.view_sales_config"/>
              <field name="arch" type="xml">
                  <data>
-                     <xpath expr="//div[@name='timesheet']" position="before">
+                     <xpath expr="//div[@name='Customer Features']" position="inside">
+                         <div>
+                              <field name="group_sale_delivery_address" class="oe_inline"/>
+                              <label for="group_sale_delivery_address"/>
+                         </div>
+                     </xpath>
+                     <xpath expr="//div[@name='group_invoice_so_lines']" position="replace">
                          <div>
                              <field name="group_invoice_so_lines" on_change="onchange_invoice_methods(group_invoice_so_lines, group_invoice_deli_orders)" class="oe_inline"/>
                              <label for="group_invoice_so_lines"/>
                          </div>
+                     </xpath>
+                     <xpath expr="//div[@name='timesheet']" position="before">
                          <div>
                              <field name="group_invoice_deli_orders" class="oe_inline" on_change="onchange_invoice_methods(group_invoice_so_lines, group_invoice_deli_orders)"/>
                              <label for="group_invoice_deli_orders"/>
index 8962c21..73b9d33 100644 (file)
@@ -56,7 +56,7 @@
                        <field name="product_id"
                        context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
                        groups="base.group_user" 
-                       on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, product_packaging, parent.fiscal_position, True, context)"/>
+                       on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, product_packaging, parent.fiscal_position, False, context)"/>
                    </field>
                    <field name="product_uom_qty" position="replace">
                        <field context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
index c4e505a..6fc5c06 100644 (file)
@@ -153,13 +153,14 @@ class stock_picking(osv.osv):
                 inv_name = picking.sale_id.client_order_ref + " : " + invoice_created.name
                 invoice_obj.write(cursor, user, [invoice_created.id], {'name': inv_name}, context=context)
             for sale_line in sale_lines:
+                account_id = False
+                if not type:
+                    type = context.get('inv_type', False)
+                if group:
+                    name = picking.name + '-' + sale_line.name
+                else:
+                    name = sale_line.name
                 if sale_line.product_id.type == 'service' and sale_line.invoiced == False:
-                    if not type:
-                        type = context.get('inv_type', False)
-                    if group:
-                        name = picking.name + '-' + sale_line.name
-                    else:
-                        name = sale_line.name
                     if type in ('out_invoice', 'out_refund'):
                         account_id = sale_line.product_id.product_tmpl_id.\
                                 property_account_income.id
@@ -173,16 +174,16 @@ class stock_picking(osv.osv):
                             account_id = sale_line.product_id.categ_id.\
                                     property_account_expense_categ.id
 
-                    vals = order_line_obj._prepare_order_line_invoice_line(cursor, user, sale_line, account_id, context)
-                    if vals: #note: in some cases we may not want to include all service lines as invoice lines
-                        vals['name'] = name
-                        vals['account_analytic_id'] = self._get_account_analytic_invoice(cursor, user, picking, sale_line)
-                        vals['invoice_id'] = invoices[result[picking.id]].id
-                        invoice_line_id = invoice_line_obj.create(cursor, user, vals, context=context)
-                        order_line_obj.write(cursor, user, [sale_line.id], {
-                            'invoiced': True,
-                            'invoice_lines': [(6, 0, [invoice_line_id])],
-                        })
+                vals = order_line_obj._prepare_order_line_invoice_line(cursor, user, sale_line, account_id, context)
+                if vals: #note: in some cases we may not want to include all service lines as invoice lines
+                    vals['name'] = name
+                    vals['account_analytic_id'] = self._get_account_analytic_invoice(cursor, user, picking, sale_line)
+                    vals['invoice_id'] = invoices[result[picking.id]].id
+                    invoice_line_id = invoice_line_obj.create(cursor, user, vals, context=context)
+                    order_line_obj.write(cursor, user, [sale_line.id], {
+                        'invoiced': True,
+                        'invoice_lines': [(6, 0, [invoice_line_id])],
+                    })
         return result
 
 # Redefinition of the new field in order to update the model stock.picking.out in the orm
index dbd9bb9..2d034c9 100644 (file)
@@ -8,14 +8,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 6.0dev\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-05-24 22:20+0000\n"
+"PO-Revision-Date: 2012-10-12 23:21+0000\n"
 "Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
 "Language-Team: German <kde-i18n-doc@kde.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-08-28 05:56+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-14 04:39+0000\n"
+"X-Generator: Launchpad (build 16137)\n"
 
 #. module: stock
 #: field:product.product,track_outgoing:0
@@ -48,7 +48,9 @@ msgid "Chained Location If Fixed"
 msgstr "Lager bei \"Fester Lagerort\""
 
 #. module: stock
-#: view:stock.inventory:0 view:stock.move:0 view:stock.picking:0
+#: view:stock.inventory:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Put in a new pack"
 msgstr "Lade in neues Paket"
 
@@ -86,8 +88,10 @@ msgid "Orders processed Today or planned for Today"
 msgstr "heutige Aufträge"
 
 #. module: stock
-#: view:stock.partial.move.line:0 view:stock.partial.picking:0
-#: field:stock.partial.picking,move_ids:0 view:stock.partial.picking.line:0
+#: view:stock.partial.move.line:0
+#: view:stock.partial.picking:0
+#: field:stock.partial.picking,move_ids:0
+#: view:stock.partial.picking.line:0
 #: view:stock.return.picking.memory:0
 msgid "Product Moves"
 msgstr "Produktlieferungen"
@@ -143,19 +147,25 @@ msgid "Picking list"
 msgstr "Lieferauftrag"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 #: field:report.stock.inventory,product_qty:0
 #: field:report.stock.move,product_qty:0
 #: field:stock.change.product.qty,new_quantity:0
 #: field:stock.inventory.line,product_qty:0
 #: field:stock.inventory.line.split,qty:0
 #: field:stock.inventory.line.split.lines,quantity:0
-#: report:stock.inventory.move:0 field:stock.move,product_qty:0
-#: field:stock.move.consume,product_qty:0 field:stock.move.scrap,product_qty:0
-#: field:stock.move.split,qty:0 field:stock.move.split.lines,quantity:0
+#: report:stock.inventory.move:0
+#: field:stock.move,product_qty:0
+#: field:stock.move.consume,product_qty:0
+#: field:stock.move.scrap,product_qty:0
+#: field:stock.move.split,qty:0
+#: field:stock.move.split.lines,quantity:0
 #: field:stock.partial.move.line,quantity:0
-#: field:stock.partial.picking.line,quantity:0 report:stock.picking.list:0
-#: field:stock.report.prodlots,qty:0 field:stock.report.tracklots,name:0
+#: field:stock.partial.picking.line,quantity:0
+#: report:stock.picking.list:0
+#: field:stock.report.prodlots,qty:0
+#: field:stock.report.tracklots,name:0
 #: field:stock.return.picking.memory,quantity:0
 #: field:stock.split.into,quantity:0
 msgid "Quantity"
@@ -171,13 +181,17 @@ msgstr ""
 "auszuführenden Lieferaufträge, die zur Bearbeitung anstehen."
 
 #. module: stock
-#: view:report.stock.move:0 field:report.stock.move,day:0
+#: view:report.stock.move:0
+#: field:report.stock.move,day:0
 msgid "Day"
 msgstr "Tag"
 
 #. module: stock
-#: view:stock.inventory:0 field:stock.inventory.line.split,product_uom:0
-#: view:stock.move:0 field:stock.move.split,product_uom:0 view:stock.picking:0
+#: view:stock.inventory:0
+#: field:stock.inventory.line.split,product_uom:0
+#: view:stock.move:0
+#: field:stock.move.split,product_uom:0
+#: view:stock.picking:0
 #: view:stock.production.lot:0
 msgid "UoM"
 msgstr "ME"
@@ -189,13 +203,15 @@ msgid "Physical Inventories"
 msgstr "Inventuraufträge"
 
 #. module: stock
-#: field:product.category,property_stock_journal:0 view:report.stock.move:0
+#: field:product.category,property_stock_journal:0
+#: view:report.stock.move:0
 #: field:stock.change.standard.price,stock_journal:0
 msgid "Stock journal"
 msgstr "Lagerjournal"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Current month"
 msgstr "Aktueller Monat"
 
@@ -206,7 +222,7 @@ msgid "Unable to assign all lots to this move!"
 msgstr "Kann nicht alle Lose zu dieser Buchung zuordnen"
 
 #. module: stock
-#: code:addons/stock/stock.py:2516
+#: code:addons/stock/stock.py:2522
 #, python-format
 msgid "Missing partial picking data for move #%s"
 msgstr "Fehlender Teillieferauftrag für die Lieferung #%s"
@@ -262,7 +278,9 @@ msgid "Other reference or serial number"
 msgstr "Fremde Referenz oder Seriennummer"
 
 #. module: stock
-#: field:stock.move,origin:0 view:stock.picking:0 field:stock.picking,origin:0
+#: field:stock.move,origin:0
+#: view:stock.picking:0
+#: field:stock.picking,origin:0
 msgid "Origin"
 msgstr "Herkunft"
 
@@ -285,13 +303,16 @@ msgid "Downstream Traceability"
 msgstr "Verfolgung Downstream"
 
 #. module: stock
-#: view:stock.move:0 field:stock.move,picking_id:0 field:stock.picking,name:0
+#: view:stock.move:0
+#: field:stock.move,picking_id:0
+#: field:stock.picking,name:0
 #: view:stock.production.lot:0
 msgid "Reference"
 msgstr "Referenz"
 
 #. module: stock
-#: code:addons/stock/stock.py:670 code:addons/stock/stock.py:1516
+#: code:addons/stock/stock.py:676
+#: code:addons/stock/stock.py:1525
 #, python-format
 msgid "Products to Process"
 msgstr "Produkte zu Lieferauftrag"
@@ -306,12 +327,13 @@ msgstr ""
 "gehen, dass auch eine physische Inventur durchgeführt wird."
 
 #. module: stock
-#: view:stock.partial.move:0 view:stock.partial.picking:0
+#: view:stock.partial.move:0
+#: view:stock.partial.picking:0
 msgid "_Validate"
 msgstr "_Validiere"
 
 #. module: stock
-#: code:addons/stock/stock.py:1149
+#: code:addons/stock/stock.py:1158
 #, python-format
 msgid "You cannot cancel picking because stock move is in done state !"
 msgstr ""
@@ -319,11 +341,12 @@ msgstr ""
 "Lagerbewegungen gibt."
 
 #. module: stock
-#: code:addons/stock/stock.py:2337 code:addons/stock/stock.py:2379
-#: code:addons/stock/stock.py:2440
+#: code:addons/stock/stock.py:2346
+#: code:addons/stock/stock.py:2388
+#: code:addons/stock/stock.py:2449
 #: code:addons/stock/wizard/stock_change_product_qty.py:87
 #: code:addons/stock/wizard/stock_fill_inventory.py:53
-#: code:addons/stock/wizard/stock_partial_picking.py:141
+#: code:addons/stock/wizard/stock_partial_picking.py:142
 #, python-format
 msgid "Warning!"
 msgstr "Warnung !"
@@ -334,16 +357,20 @@ msgid "Group by partner"
 msgstr "Gruppiert nach Partner"
 
 #. module: stock
-#: model:ir.model,name:stock.model_res_partner view:report.stock.inventory:0
-#: field:report.stock.inventory,partner_id:0 view:report.stock.move:0
-#: field:report.stock.move,partner_id:0 view:stock.move:0
-#: field:stock.move,partner_id:0 view:stock.picking:0
+#: model:ir.model,name:stock.model_res_partner
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,partner_id:0
+#: view:report.stock.move:0
+#: field:report.stock.move,partner_id:0
+#: view:stock.move:0
+#: field:stock.move,partner_id:0
+#: view:stock.picking:0
 #: field:stock.picking,partner_id:0
 msgid "Partner"
 msgstr "Partner"
 
 #. module: stock
-#: code:addons/stock/stock.py:2119
+#: code:addons/stock/stock.py:2128
 #, python-format
 msgid ""
 "Can not create Journal Entry, Input Account defined on this product and "
@@ -402,11 +429,17 @@ msgstr ""
 "Ressourcen des Tages anzuzeigen."
 
 #. module: stock
-#: view:report.stock.inventory:0 field:report.stock.inventory,state:0
-#: view:report.stock.move:0 field:report.stock.move,state:0
-#: view:stock.inventory:0 field:stock.inventory,state:0
-#: field:stock.inventory.line,state:0 view:stock.move:0
-#: field:stock.move,state:0 view:stock.picking:0 field:stock.picking,state:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,state:0
+#: view:report.stock.move:0
+#: field:report.stock.move,state:0
+#: view:stock.inventory:0
+#: field:stock.inventory,state:0
+#: field:stock.inventory.line,state:0
+#: view:stock.move:0
+#: field:stock.move,state:0
+#: view:stock.picking:0
+#: field:stock.picking,state:0
 #: report:stock.picking.list:0
 msgid "State"
 msgstr "Status"
@@ -438,14 +471,19 @@ msgstr "ME"
 
 #. module: stock
 #: selection:report.stock.inventory,state:0
-#: selection:report.stock.move,state:0 view:stock.move:0
-#: selection:stock.move,state:0 view:stock.picking:0
-#: view:stock.production.lot:0 field:stock.production.lot,stock_available:0
+#: selection:report.stock.move,state:0
+#: view:stock.move:0
+#: selection:stock.move,state:0
+#: view:stock.picking:0
+#: report:stock.picking.list:0
+#: view:stock.production.lot:0
+#: field:stock.production.lot,stock_available:0
 msgid "Available"
 msgstr "Verfügbar"
 
 #. module: stock
-#: view:stock.picking:0 field:stock.picking,min_date:0
+#: view:stock.picking:0
+#: field:stock.picking,min_date:0
 msgid "Expected Date"
 msgstr "Voraussichtliche Lieferung"
 
@@ -497,12 +535,14 @@ msgstr ""
 "Finanzkonto den aktuellen Bestandswert des Produkts."
 
 #. module: stock
-#: field:report.stock.inventory,location_type:0 field:stock.location,usage:0
+#: field:report.stock.inventory,location_type:0
+#: field:stock.location,usage:0
 msgid "Location Type"
 msgstr "Lagerort Art"
 
 #. module: stock
-#: help:report.stock.move,type:0 help:stock.picking,type:0
+#: help:report.stock.move,type:0
+#: help:stock.picking,type:0
 msgid "Shipping type specify, goods coming in or going out."
 msgstr "Liefertyp, Wareneingang oder -ausgang"
 
@@ -522,8 +562,10 @@ msgid "Product Lots Filter"
 msgstr "Fertigungslos Filter"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
-#: report:stock.inventory.move:0 report:stock.picking.list:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
+#: report:stock.inventory.move:0
+#: report:stock.picking.list:0
 msgid "["
 msgstr "["
 
@@ -542,7 +584,7 @@ msgid "Move History (child moves)"
 msgstr "Buchungshistorie (unterg. Buchungen)"
 
 #. module: stock
-#: code:addons/stock/stock.py:2125
+#: code:addons/stock/stock.py:2134
 #, python-format
 msgid ""
 "There is no stock output account defined for this product or its category: "
@@ -569,7 +611,7 @@ msgid "stock.partial.move.line"
 msgstr "stock.partial.move.line"
 
 #. module: stock
-#: code:addons/stock/stock.py:760
+#: code:addons/stock/stock.py:766
 #, python-format
 msgid "You can not process picking without stock moves"
 msgstr "Lieferscheine ohne Buchungen können nicht verarbeitet werden."
@@ -586,7 +628,8 @@ msgid "Order(Origin)"
 msgstr "Auftragsgrundlage"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 msgid "Grand Total:"
 msgstr "Gesamtsumme:"
 
@@ -610,12 +653,14 @@ msgid "Inventory Control"
 msgstr "Bestandsverwaltung"
 
 #. module: stock
-#: view:stock.location:0 field:stock.location,comment:0
+#: view:stock.location:0
+#: field:stock.location,comment:0
 msgid "Additional Information"
 msgstr "Weitere Informationen"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 msgid "Location / Product"
 msgstr "Lagerort / Produkt"
 
@@ -625,7 +670,7 @@ msgid "Destination Address "
 msgstr "Zieladresse "
 
 #. module: stock
-#: code:addons/stock/stock.py:1333
+#: code:addons/stock/stock.py:1342
 #, python-format
 msgid "Reception"
 msgstr "Annahme"
@@ -653,7 +698,8 @@ msgstr ""
 "Lagervorgängen oder zu verantwortlichen Lagermitarbeitern."
 
 #. module: stock
-#: field:stock.location,complete_name:0 field:stock.location,name:0
+#: field:stock.location,complete_name:0
+#: field:stock.location,name:0
 msgid "Location Name"
 msgstr "Lagerort Bezeichnung"
 
@@ -700,12 +746,13 @@ msgid "Parent Wizard (for existing lines)"
 msgstr "Ãœbergeordneter Assistent (für bestehende Positionen)"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Move Information"
 msgstr "Warenbewegung Information"
 
 #. module: stock
-#: code:addons/stock/stock.py:2131
+#: code:addons/stock/stock.py:2140
 #, python-format
 msgid ""
 "There is no inventory Valuation account defined on the product category: "
@@ -727,7 +774,8 @@ msgstr "August"
 #. module: stock
 #: model:ir.actions.act_window,name:stock.action_tracking_form
 #: model:ir.model,name:stock.model_stock_tracking
-#: model:ir.ui.menu,name:stock.menu_action_tracking_form view:stock.tracking:0
+#: model:ir.ui.menu,name:stock.menu_action_tracking_form
+#: view:stock.tracking:0
 msgid "Packs"
 msgstr "Pakete"
 
@@ -758,7 +806,8 @@ msgstr "Beschaffungslager"
 #: model:ir.ui.menu,name:stock.menu_action_production_lot_form
 #: field:stock.inventory.line.split,line_exist_ids:0
 #: field:stock.inventory.line.split,line_ids:0
-#: field:stock.move.split,line_exist_ids:0 field:stock.move.split,line_ids:0
+#: field:stock.move.split,line_exist_ids:0
+#: field:stock.move.split,line_ids:0
 msgid "Production Lots"
 msgstr "Fertigungslose"
 
@@ -806,7 +855,7 @@ msgid "Reference must be unique per Company!"
 msgstr "Die Referenz muss je Firma eindeutig sein"
 
 #. module: stock
-#: code:addons/stock/product.py:417
+#: code:addons/stock/product.py:421
 #, python-format
 msgid "Future Receptions"
 msgstr "Zukünftige Wareneingänge"
@@ -838,7 +887,8 @@ msgid "Destination Move"
 msgstr "Ziel"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Process Now"
 msgstr "Vorgang Fortsetzen"
 
@@ -911,7 +961,7 @@ msgid "Merge Inventory"
 msgstr "Zusammenführung von Inventuren"
 
 #. module: stock
-#: code:addons/stock/product.py:433
+#: code:addons/stock/product.py:437
 #, python-format
 msgid "Future P&L"
 msgstr "Zukünftige G&V"
@@ -920,12 +970,15 @@ msgstr "Zukünftige G&V"
 #: view:board.board:0
 #: model:ir.actions.act_window,name:stock.action_incoming_product_board
 #: model:ir.actions.act_window,name:stock.action_picking_tree4
-#: model:ir.ui.menu,name:stock.menu_action_picking_tree4 view:stock.picking:0
+#: model:ir.ui.menu,name:stock.menu_action_picking_tree4
+#: view:stock.picking:0
 msgid "Incoming Shipments"
 msgstr "Wareneingang"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:stock.move:0 view:stock.picking:0
+#: view:report.stock.inventory:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Scrap"
 msgstr "Ausschuss melden"
 
@@ -945,7 +998,8 @@ msgid "Incoming"
 msgstr "Eingang"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 #: field:stock.move,price_unit:0
 msgid "Unit Price"
 msgstr "Preis/ME"
@@ -972,12 +1026,13 @@ msgid "Currency"
 msgstr "Währung"
 
 #. module: stock
-#: view:stock.picking:0 report:stock.picking.list:0
+#: view:stock.picking:0
+#: report:stock.picking.list:0
 msgid "Journal"
 msgstr "Journal"
 
 #. module: stock
-#: code:addons/stock/stock.py:1345
+#: code:addons/stock/stock.py:1354
 #, python-format
 msgid "is scheduled %s."
 msgstr "ist geplant %s."
@@ -1024,7 +1079,8 @@ msgstr ""
 "Konsignationen verwendet wird."
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Month-1"
 msgstr "Monat-1"
 
@@ -1062,7 +1118,8 @@ msgid "View"
 msgstr "Ansicht"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Last month"
 msgstr "Letzter Monat"
 
@@ -1077,7 +1134,7 @@ msgid "Stock Valuation Account"
 msgstr "Lagerbestandskonto"
 
 #. module: stock
-#: code:addons/stock/stock.py:1349
+#: code:addons/stock/stock.py:1358
 #, python-format
 msgid "is waiting."
 msgstr "ist unerledigt"
@@ -1165,7 +1222,7 @@ msgid "Author"
 msgstr "Autor"
 
 #. module: stock
-#: code:addons/stock/stock.py:1332
+#: code:addons/stock/stock.py:1341
 #, python-format
 msgid "Delivery Order"
 msgstr "Lieferauftrag"
@@ -1176,12 +1233,13 @@ msgid "Manual Operation"
 msgstr "Manuelle Durchführung"
 
 #. module: stock
-#: view:stock.location:0 view:stock.move:0
+#: view:stock.location:0
+#: view:stock.move:0
 msgid "Supplier"
 msgstr "Lieferant"
 
 #. module: stock
-#: code:addons/stock/stock.py:2727
+#: code:addons/stock/stock.py:2739
 #, python-format
 msgid ""
 "In order to cancel this inventory, you must first unpost related journal "
@@ -1196,7 +1254,7 @@ msgid "Date Done"
 msgstr "Erledigt am"
 
 #. module: stock
-#: code:addons/stock/wizard/stock_partial_picking.py:148
+#: code:addons/stock/wizard/stock_partial_picking.py:149
 #, python-format
 msgid ""
 "The uom rounding does not allow you to ship \"%s %s\", only roundings of "
@@ -1224,7 +1282,8 @@ msgstr "März"
 #. module: stock
 #: model:ir.actions.act_window,name:stock.action_view_stock_inventory_line_split
 #: model:ir.model,name:stock.model_stock_inventory_line_split
-#: view:stock.inventory:0 view:stock.inventory.line:0
+#: view:stock.inventory:0
+#: view:stock.inventory.line:0
 msgid "Split inventory lines"
 msgstr "Aufteilen Inventurposition"
 
@@ -1260,7 +1319,8 @@ msgstr "Fertigungslosnummer"
 
 #. module: stock
 #: field:stock.inventory.line,product_uom:0
-#: field:stock.move.consume,product_uom:0 field:stock.move.scrap,product_uom:0
+#: field:stock.move.consume,product_uom:0
+#: field:stock.move.scrap,product_uom:0
 msgid "Product UOM"
 msgstr "Produkt ME"
 
@@ -1270,12 +1330,14 @@ msgid "Partner Locations"
 msgstr "Lagerort beim Partner"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Current year"
 msgstr "Aktuelles Jahr"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Total quantity"
 msgstr "Gesamtmenge"
 
@@ -1329,6 +1391,7 @@ msgstr "Lieferauftrag:"
 
 #. module: stock
 #: selection:stock.move,state:0
+#: report:stock.picking.list:0
 msgid "Waiting Another Move"
 msgstr "Erwarte eine andere Buchung"
 
@@ -1357,7 +1420,7 @@ msgstr ""
 "(wenn Durschnittspreisbewertung gewählt ist)"
 
 #. module: stock
-#: code:addons/stock/stock.py:1350
+#: code:addons/stock/stock.py:1359
 #, python-format
 msgid "is in draft state."
 msgstr "ist im Entwurf..."
@@ -1383,16 +1446,24 @@ msgid "Shop 1"
 msgstr "Shop 1"
 
 #. module: stock
-#: view:stock.change.product.qty:0 view:stock.change.standard.price:0
-#: view:stock.fill.inventory:0 view:stock.inventory.merge:0
-#: view:stock.invoice.onshipping:0 view:stock.location.product:0
-#: view:stock.move:0 view:stock.partial.move:0 view:stock.partial.picking:0
-#: view:stock.picking:0 view:stock.return.picking:0 view:stock.split.into:0
+#: view:stock.change.product.qty:0
+#: view:stock.change.standard.price:0
+#: view:stock.fill.inventory:0
+#: view:stock.inventory.merge:0
+#: view:stock.invoice.onshipping:0
+#: view:stock.location.product:0
+#: view:stock.move:0
+#: view:stock.partial.move:0
+#: view:stock.partial.picking:0
+#: view:stock.picking:0
+#: view:stock.return.picking:0
+#: view:stock.split.into:0
 msgid "_Cancel"
 msgstr "Abbruch"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Ready"
 msgstr "Verfügbar"
 
@@ -1432,7 +1503,8 @@ msgstr ""
 "erstellt werden"
 
 #. module: stock
-#: view:stock.picking:0 field:stock.picking,invoice_state:0
+#: view:stock.picking:0
+#: field:stock.picking,invoice_state:0
 msgid "Invoice Control"
 msgstr "Rechnungskontrolle"
 
@@ -1448,12 +1520,14 @@ msgstr "Interne Lieferauftragsliste"
 
 #. module: stock
 #: selection:report.stock.inventory,state:0
-#: selection:report.stock.move,state:0 view:stock.picking:0
+#: selection:report.stock.move,state:0
+#: view:stock.picking:0
 msgid "Waiting"
 msgstr "Warteliste"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Split"
 msgstr "Aufteilen"
 
@@ -1508,8 +1582,10 @@ msgid "Picking List:"
 msgstr "Packauftrag:"
 
 #. module: stock
-#: field:stock.inventory,date:0 field:stock.move,create_date:0
-#: field:stock.production.lot,date:0 field:stock.tracking,date:0
+#: field:stock.inventory,date:0
+#: field:stock.move,create_date:0
+#: field:stock.production.lot,date:0
+#: field:stock.tracking,date:0
 msgid "Creation Date"
 msgstr "Erzeugt am"
 
@@ -1524,7 +1600,8 @@ msgid "Address of  customer or supplier."
 msgstr "Kunden- oder Lieferantenadresse"
 
 #. module: stock
-#: view:report.stock.move:0 field:report.stock.move,picking_id:0
+#: view:report.stock.move:0
+#: field:report.stock.move,picking_id:0
 msgid "Packing"
 msgstr "Lieferauftrag"
 
@@ -1536,7 +1613,7 @@ msgid "Customer Location"
 msgstr "Kundenlagerort"
 
 #. module: stock
-#: code:addons/stock/stock.py:2312
+#: code:addons/stock/stock.py:2321
 #, python-format
 msgid "You can only delete draft moves."
 msgstr "Sie können lediglich Warenbewegungen im Entwurf (Status) löschen."
@@ -1563,7 +1640,8 @@ msgid "Analysis including future moves (similar to virtual stock)"
 msgstr "Analyse mit zukünftigen Buchungen"
 
 #. module: stock
-#: model:ir.actions.act_window,name:stock.action3 view:stock.tracking:0
+#: model:ir.actions.act_window,name:stock.action3
+#: view:stock.tracking:0
 msgid "Downstream traceability"
 msgstr "Auswertung Rückverfolgung"
 
@@ -1587,7 +1665,9 @@ msgstr ""
 "löschen."
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0 field:stock.picking,date:0
+#: view:stock.move:0
+#: view:stock.picking:0
+#: field:stock.picking,date:0
 msgid "Order Date"
 msgstr "Auftragsdatum"
 
@@ -1598,7 +1678,8 @@ msgid "INV: %s"
 msgstr "INV: %s"
 
 #. module: stock
-#: view:stock.location:0 field:stock.location,location_id:0
+#: view:stock.location:0
+#: field:stock.location,location_id:0
 msgid "Parent Location"
 msgstr "Hauptlagerort"
 
@@ -1630,7 +1711,7 @@ msgid "Let this field empty if this location is shared between all companies"
 msgstr "Leer lassen, wenn dieses Feld für alle Unternehmen Güligkeit hat."
 
 #. module: stock
-#: code:addons/stock/stock.py:2337
+#: code:addons/stock/stock.py:2346
 #, python-format
 msgid "Please provide a positive quantity to scrap!"
 msgstr "Geben Sie bitte eine positive Menge als Ausschuss ein"
@@ -1683,7 +1764,7 @@ msgid "Supplier Location"
 msgstr "Lieferantenlagerort"
 
 #. module: stock
-#: code:addons/stock/stock.py:2358
+#: code:addons/stock/stock.py:2367
 #, python-format
 msgid "were scrapped"
 msgstr "wurde als Ausschuss gemeldet"
@@ -1737,8 +1818,11 @@ msgstr "Lagerbewertungskonto (Ausgehend)"
 #. module: stock
 #: model:ir.actions.act_window,name:stock.act_product_stock_move_open
 #: model:ir.actions.act_window,name:stock.action_move_form2
-#: model:ir.ui.menu,name:stock.menu_action_move_form2 view:stock.inventory:0
-#: view:stock.move:0 view:stock.picking:0 view:stock.production.lot:0
+#: model:ir.ui.menu,name:stock.menu_action_move_form2
+#: view:stock.inventory:0
+#: view:stock.move:0
+#: view:stock.picking:0
+#: view:stock.production.lot:0
 #: view:stock.tracking:0
 msgid "Stock Moves"
 msgstr "Lieferaufträge"
@@ -1791,7 +1875,8 @@ msgid "Back Orders"
 msgstr "Auftragsrückstand"
 
 #. module: stock
-#: view:product.product:0 view:product.template:0
+#: view:product.product:0
+#: view:product.template:0
 msgid "Counter-Part Locations Properties"
 msgstr "Gegenposition Lagerorte Eigenschaften"
 
@@ -1801,14 +1886,15 @@ msgid "Localization"
 msgstr "Standort Lager"
 
 #. module: stock
-#: code:addons/stock/product.py:429
+#: code:addons/stock/product.py:433
 #, python-format
 msgid "Delivered Qty"
 msgstr "Liefermenge"
 
 #. module: stock
 #: model:ir.actions.act_window,name:stock.track_line
-#: view:stock.inventory.line.split:0 view:stock.move.split:0
+#: view:stock.inventory.line.split:0
+#: view:stock.move.split:0
 msgid "Split in lots"
 msgstr "Teile in Lose"
 
@@ -1836,16 +1922,22 @@ msgid "Day Planned"
 msgstr "Geplantes Datum"
 
 #. module: stock
-#: view:report.stock.inventory:0 field:report.stock.inventory,date:0
-#: field:report.stock.move,date:0 view:stock.inventory:0
-#: report:stock.inventory.move:0 view:stock.move:0 field:stock.move,date:0
-#: field:stock.partial.move,date:0 field:stock.partial.picking,date:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,date:0
+#: field:report.stock.move,date:0
+#: view:stock.inventory:0
+#: report:stock.inventory.move:0
+#: view:stock.move:0
+#: field:stock.move,date:0
+#: field:stock.partial.move,date:0
+#: field:stock.partial.picking,date:0
 #: view:stock.picking:0
 msgid "Date"
 msgstr "Datum"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Extended Filters..."
 msgstr "Erweiterter Filter..."
 
@@ -1868,7 +1960,7 @@ msgstr "Pinnwand Lagerwirtschaft"
 #. module: stock
 #: field:stock.incoterms,code:0
 msgid "Code"
-msgstr "Kurzbezeichnung"
+msgstr "Kurzbez."
 
 #. module: stock
 #: view:stock.inventory.line.split:0
@@ -1882,26 +1974,31 @@ msgid "Warehouse Dashboard"
 msgstr "Pinnwand Lager"
 
 #. module: stock
-#: code:addons/stock/stock.py:513
+#: code:addons/stock/stock.py:519
 #, python-format
 msgid "You can not remove a lot line !"
 msgstr "Sie können keine Position aus dem Los entfernen!"
 
 #. module: stock
-#: model:ir.model,name:stock.model_stock_move_scrap view:stock.move:0
-#: view:stock.move.scrap:0 view:stock.picking:0
+#: model:ir.model,name:stock.model_stock_move_scrap
+#: view:stock.move:0
+#: view:stock.move.scrap:0
+#: view:stock.picking:0
 msgid "Scrap Products"
 msgstr "Ausschuss buchen"
 
 #. module: stock
-#: code:addons/stock/stock.py:1157
+#: code:addons/stock/stock.py:1166
 #, python-format
 msgid "You cannot remove the picking which is in %s state !"
 msgstr "Ein Lieferschein mit Status %s kann nicht entfernt werden."
 
 #. module: stock
-#: view:stock.inventory.line.split:0 view:stock.move.consume:0
-#: view:stock.move.scrap:0 view:stock.move.split:0 view:stock.picking:0
+#: view:stock.inventory.line.split:0
+#: view:stock.move.consume:0
+#: view:stock.move.scrap:0
+#: view:stock.move.split:0
+#: view:stock.picking:0
 msgid "Cancel"
 msgstr "Abbrechen"
 
@@ -1912,22 +2009,29 @@ msgid "Return Picking"
 msgstr "Rücklieferschein"
 
 #. module: stock
-#: view:stock.inventory:0 view:stock.move:0 view:stock.picking:0
+#: view:stock.inventory:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Split in production lots"
 msgstr "Aufteilen Fertigungsauftrag"
 
 #. module: stock
 #: model:ir.model,name:stock.model_stock_location
-#: field:product.product,location_id:0 view:report.stock.inventory:0
+#: field:product.product,location_id:0
+#: view:report.stock.inventory:0
 #: field:report.stock.inventory,location_id:0
 #: field:stock.change.product.qty,location_id:0
 #: field:stock.fill.inventory,location_id:0
-#: field:stock.inventory.line,location_id:0 report:stock.inventory.move:0
-#: view:stock.location:0 view:stock.move:0
-#: field:stock.move.consume,location_id:0 field:stock.move.scrap,location_id:0
+#: field:stock.inventory.line,location_id:0
+#: report:stock.inventory.move:0
+#: view:stock.location:0
+#: view:stock.move:0
+#: field:stock.move.consume,location_id:0
+#: field:stock.move.scrap,location_id:0
 #: field:stock.partial.move.line,location_id:0
 #: field:stock.partial.picking.line,location_id:0
-#: field:stock.picking,location_id:0 report:stock.picking.list:0
+#: field:stock.picking,location_id:0
+#: report:stock.picking.list:0
 #: field:stock.report.prodlots,location_id:0
 #: field:stock.report.tracklots,location_id:0
 msgid "Location"
@@ -1970,7 +2074,8 @@ msgid "Cost Price"
 msgstr "Herstellungskosten"
 
 #. module: stock
-#: view:product.product:0 field:product.product,valuation:0
+#: view:product.product:0
+#: field:product.product,valuation:0
 msgid "Inventory Valuation"
 msgstr "Inventur Bewertung"
 
@@ -1980,7 +2085,8 @@ msgid "Orders planned for today"
 msgstr "Für heute geplante Aufträge"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Process Later"
 msgstr "Ware ist Verfügbar"
 
@@ -2012,7 +2118,7 @@ msgstr ""
 "die Produktivität in Ihrem Lager analysieren wollen."
 
 #. module: stock
-#: code:addons/stock/stock.py:2116
+#: code:addons/stock/stock.py:2125
 #, python-format
 msgid ""
 "Can not create Journal Entry, Output Account defined on this product and "
@@ -2047,7 +2153,7 @@ msgid "Stock report by tracking lots"
 msgstr "Bestand nach Paketnummern"
 
 #. module: stock
-#: code:addons/stock/stock.py:2122
+#: code:addons/stock/stock.py:2131
 #, python-format
 msgid ""
 "There is no stock input account defined for this product or its category: "
@@ -2057,7 +2163,7 @@ msgstr ""
 "\"%s\" (id: %d)"
 
 #. module: stock
-#: code:addons/stock/product.py:419
+#: code:addons/stock/product.py:423
 #, python-format
 msgid "Received Qty"
 msgstr "Angenommene Menge"
@@ -2082,7 +2188,8 @@ msgid "Import Inventory"
 msgstr "Importiere Inventur"
 
 #. module: stock
-#: field:stock.incoterms,name:0 field:stock.move,name:0
+#: field:stock.incoterms,name:0
+#: field:stock.move,name:0
 #: field:stock.warehouse,name:0
 msgid "Name"
 msgstr "Bezeichnung"
@@ -2133,13 +2240,16 @@ msgid "Customer Locations"
 msgstr "Kunden Lagerort"
 
 #. module: stock
-#: view:stock.change.product.qty:0 view:stock.change.standard.price:0
+#: view:stock.change.product.qty:0
+#: view:stock.change.standard.price:0
 msgid "_Apply"
 msgstr "_Anwenden"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
-#: report:stock.inventory.move:0 report:stock.picking.list:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
+#: report:stock.inventory.move:0
+#: report:stock.picking.list:0
 msgid "]"
 msgstr "]"
 
@@ -2149,7 +2259,8 @@ msgid "Inventory Location"
 msgstr "Lagerort Bestandsaufnahme"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 msgid "Total value"
 msgstr "Gesamt Wert"
 
@@ -2223,8 +2334,11 @@ msgstr ""
 "das aktuelle Durchführungsdatum"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
-#: view:stock.inventory:0 view:stock.move:0 view:stock.picking:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
+#: view:stock.inventory:0
+#: view:stock.move:0
+#: view:stock.picking:0
 #: view:stock.production.lot:0
 msgid "Group By..."
 msgstr "Gruppierung..."
@@ -2240,7 +2354,7 @@ msgid "Inventory loss"
 msgstr "Bestandsaufnahme"
 
 #. module: stock
-#: code:addons/stock/stock.py:1341
+#: code:addons/stock/stock.py:1350
 #, python-format
 msgid "Document"
 msgstr "Dokument"
@@ -2251,7 +2365,8 @@ msgid "Input Picking List"
 msgstr "Eingangslieferscheine"
 
 #. module: stock
-#: field:stock.move,product_uom:0 field:stock.partial.move.line,product_uom:0
+#: field:stock.move,product_uom:0
+#: field:stock.partial.move.line,product_uom:0
 #: field:stock.partial.picking.line,product_uom:0
 msgid "Unit of Measure"
 msgstr "ME"
@@ -2320,23 +2435,27 @@ msgid "Warehouse board"
 msgstr "Pinnwand Lagerwirtschaft"
 
 #. module: stock
-#: code:addons/stock/product.py:439
+#: code:addons/stock/product.py:443
 #, python-format
 msgid "Future Qty"
 msgstr "Zukünftige Menge"
 
 #. module: stock
-#: field:stock.move,note:0 view:stock.picking:0 field:stock.picking,note:0
+#: field:stock.move,note:0
+#: view:stock.picking:0
+#: field:stock.picking,note:0
 msgid "Notes"
 msgstr "Bemerkungen"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 msgid "Value"
 msgstr "Wert"
 
 #. module: stock
-#: field:report.stock.move,type:0 field:stock.location,chained_picking_type:0
+#: field:report.stock.move,type:0
+#: field:stock.location,chained_picking_type:0
 #: field:stock.picking,type:0
 msgid "Shipping Type"
 msgstr "Liefertyp"
@@ -2350,8 +2469,11 @@ msgstr "Lagerbuchungen bestätigt,verfügbar, wartend"
 #: model:ir.actions.act_window,name:stock.act_product_location_open
 #: model:ir.ui.menu,name:stock.menu_product_in_config_stock
 #: model:ir.ui.menu,name:stock.menu_stock_product
-#: model:ir.ui.menu,name:stock.menu_stock_products_menu view:stock.inventory:0
-#: view:stock.partial.move:0 view:stock.partial.picking:0 view:stock.picking:0
+#: model:ir.ui.menu,name:stock.menu_stock_products_menu
+#: view:stock.inventory:0
+#: view:stock.partial.move:0
+#: view:stock.partial.picking:0
+#: view:stock.picking:0
 msgid "Products"
 msgstr "Produkte"
 
@@ -2372,7 +2494,8 @@ msgstr "Auslieferungsmethode"
 
 #. module: stock
 #: help:report.stock.move,location_dest_id:0
-#: help:stock.move,location_dest_id:0 help:stock.picking,location_dest_id:0
+#: help:stock.move,location_dest_id:0
+#: help:stock.picking,location_dest_id:0
 msgid "Location where the system will stock the finished products."
 msgstr "Lagerort, wo das System die Fertigprodukte lagert."
 
@@ -2415,7 +2538,7 @@ msgid "Delay(Days)"
 msgstr "Verzögerung(Tage)"
 
 #. module: stock
-#: code:addons/stock/stock.py:1697
+#: code:addons/stock/stock.py:1706
 #, python-format
 msgid "Operation forbidden"
 msgstr "Vorgang verboten"
@@ -2426,7 +2549,7 @@ msgid "Expected date for the picking to be processed"
 msgstr "Geplantes Verarbeitungsdatum für die Lieferung"
 
 #. module: stock
-#: code:addons/stock/product.py:435
+#: code:addons/stock/product.py:439
 #, python-format
 msgid "P&L Qty"
 msgstr "Anzahl"
@@ -2437,7 +2560,8 @@ msgid "Internal Pickings to invoice"
 msgstr "zu fakturierende interne Lieferungen"
 
 #. module: stock
-#: view:stock.production.lot:0 field:stock.production.lot,revisions:0
+#: view:stock.production.lot:0
+#: field:stock.production.lot,revisions:0
 msgid "Revisions"
 msgstr "Revisionen"
 
@@ -2476,7 +2600,8 @@ msgstr ""
 "Kriterien, um Ihre Analyse exakt auf Ihren Bedarf auszurichten."
 
 #. module: stock
-#: help:report.stock.move,location_id:0 help:stock.move,location_id:0
+#: help:report.stock.move,location_id:0
+#: help:stock.move,location_id:0
 msgid ""
 "Sets a location if you produce at a fixed location. This can be a partner "
 "location if you subcontract the manufacturing operations."
@@ -2515,7 +2640,8 @@ msgid "Create"
 msgstr "Erstellen"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Dates"
 msgstr "Datumsangaben"
 
@@ -2532,7 +2658,8 @@ msgstr "Quelle"
 #. module: stock
 #: model:ir.model,name:stock.model_stock_inventory
 #: selection:report.stock.inventory,location_type:0
-#: field:stock.inventory.line,inventory_id:0 report:stock.inventory.move:0
+#: field:stock.inventory.line,inventory_id:0
+#: report:stock.inventory.move:0
 #: selection:stock.location,usage:0
 msgid "Inventory"
 msgstr "Lagerbestand"
@@ -2547,7 +2674,7 @@ msgstr "Lieferschein"
 msgid ""
 "The combination of serial number and internal reference must be unique !"
 msgstr ""
-"Die Kombination von Serinenummer und interner Referenz muss eindeutig sein."
+"Die Kombination von Seriennummer und interner Referenz muss eindeutig sein."
 
 #. module: stock
 #: view:stock.inventory:0
@@ -2556,7 +2683,8 @@ msgstr "Bestandsaufnahme Abbrechen"
 
 #. module: stock
 #: code:addons/stock/report/report_stock.py:78
-#: code:addons/stock/report/report_stock.py:135 code:addons/stock/stock.py:760
+#: code:addons/stock/report/report_stock.py:135
+#: code:addons/stock/stock.py:766
 #, python-format
 msgid "Error !"
 msgstr "Fehler !"
@@ -2573,7 +2701,7 @@ msgid "Fixed Location"
 msgstr "Fester Lagerort"
 
 #. module: stock
-#: code:addons/stock/stock.py:2486
+#: code:addons/stock/stock.py:2492
 #, python-format
 msgid "Product  '%s' is consumed with '%s' quantity."
 msgstr "Produkt  '%s'  Verbracuhsmenge '%s' ."
@@ -2625,14 +2753,19 @@ msgid "opening"
 msgstr "Öffnen"
 
 #. module: stock
+#: code:addons/stock/report/stock_graph.py:36
+#: code:addons/stock/report/stock_graph.py:104
 #: model:ir.actions.report.xml,name:stock.report_product_history
+#, python-format
 msgid "Stock Level Forecast"
 msgstr "Bestandsvorschau"
 
 #. module: stock
 #: model:ir.model,name:stock.model_stock_journal
-#: field:report.stock.move,stock_journal:0 view:stock.journal:0
-#: field:stock.journal,name:0 field:stock.picking,stock_journal_id:0
+#: field:report.stock.move,stock_journal:0
+#: view:stock.journal:0
+#: field:stock.journal,name:0
+#: field:stock.picking,stock_journal_id:0
 msgid "Stock Journal"
 msgstr "Lager Journal"
 
@@ -2660,13 +2793,15 @@ msgid "Force Availability"
 msgstr "Erzwinge Verfügbarkeit"
 
 #. module: stock
-#: model:ir.actions.act_window,name:stock.move_scrap view:stock.move.scrap:0
+#: model:ir.actions.act_window,name:stock.move_scrap
+#: view:stock.move.scrap:0
 msgid "Scrap Move"
 msgstr "Buchung Ausschuss"
 
 #. module: stock
 #: model:ir.actions.act_window,name:stock.action_reception_picking_move
-#: model:ir.ui.menu,name:stock.menu_action_pdct_in view:stock.move:0
+#: model:ir.ui.menu,name:stock.menu_action_pdct_in
+#: view:stock.move:0
 msgid "Receive Products"
 msgstr "Produktzugänge"
 
@@ -2682,7 +2817,8 @@ msgid "View Stock of Products"
 msgstr "Zeige Lagerorte der Produkte"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
 #: field:report.stock.move,month:0
 msgid "Month"
 msgstr "Monat"
@@ -2734,18 +2870,24 @@ msgid "Todo"
 msgstr "Zu erledigen"
 
 #. module: stock
-#: view:report.stock.inventory:0 field:report.stock.inventory,company_id:0
-#: view:report.stock.move:0 field:report.stock.move,company_id:0
-#: field:stock.inventory,company_id:0 field:stock.inventory.line,company_id:0
-#: field:stock.location,company_id:0 field:stock.move,company_id:0
-#: field:stock.picking,company_id:0 field:stock.production.lot,company_id:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,company_id:0
+#: view:report.stock.move:0
+#: field:report.stock.move,company_id:0
+#: field:stock.inventory,company_id:0
+#: field:stock.inventory.line,company_id:0
+#: field:stock.location,company_id:0
+#: field:stock.move,company_id:0
+#: field:stock.picking,company_id:0
+#: field:stock.production.lot,company_id:0
 #: field:stock.production.lot.revision,company_id:0
 #: field:stock.warehouse,company_id:0
 msgid "Company"
 msgstr "Unternehmen"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Unit Of Measure"
 msgstr "ME"
 
@@ -2759,7 +2901,7 @@ msgstr ""
 "definiert: \"%s\" (id: %d)"
 
 #. module: stock
-#: code:addons/stock/stock.py:2445
+#: code:addons/stock/stock.py:2454
 #, python-format
 msgid "Can not consume a move with negative or zero quantity !"
 msgstr ""
@@ -2790,8 +2932,10 @@ msgid "Delivery Counter"
 msgstr "Versand Schalter"
 
 #. module: stock
-#: view:report.stock.inventory:0 field:report.stock.inventory,prodlot_id:0
-#: view:stock.move:0 report:stock.picking.list:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,prodlot_id:0
+#: view:stock.move:0
+#: report:stock.picking.list:0
 msgid "Lot"
 msgstr "Fertigungslos"
 
@@ -2801,7 +2945,7 @@ msgid "Production Lot Number"
 msgstr "Produktionslosnummer"
 
 #. module: stock
-#: code:addons/stock/stock.py:2697
+#: code:addons/stock/stock.py:2709
 #, python-format
 msgid "Inventory '%s' is done."
 msgstr "Inventur '%s' is erledigt."
@@ -2812,7 +2956,7 @@ msgid "Quantity (UOS)"
 msgstr "Menge (VE)"
 
 #. module: stock
-#: code:addons/stock/stock.py:1743
+#: code:addons/stock/stock.py:1752
 #, python-format
 msgid ""
 "You are moving %.2f %s products but only %.2f %s available in this lot."
@@ -2836,7 +2980,8 @@ msgid "Back Order"
 msgstr "Auftragsrückstand"
 
 #. module: stock
-#: field:stock.incoterms,active:0 field:stock.location,active:0
+#: field:stock.incoterms,active:0
+#: field:stock.location,active:0
 #: field:stock.tracking,active:0
 msgid "Active"
 msgstr "Aktiv"
@@ -2847,7 +2992,7 @@ msgid "Properties"
 msgstr "Eigenschaften"
 
 #. module: stock
-#: code:addons/stock/stock.py:1082
+#: code:addons/stock/stock.py:1088
 #, python-format
 msgid "Error, no partner !"
 msgstr "Fehler, kein Partner!"
@@ -2873,7 +3018,8 @@ msgid "stock.partial.picking.line"
 msgstr "stock.partial.picking.line"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 #: report:stock.inventory.move:0
 msgid "Total:"
 msgstr "Gesamt:"
@@ -2903,7 +3049,7 @@ msgid "Inventory Reference"
 msgstr "Inventurauftrag"
 
 #. module: stock
-#: code:addons/stock/stock.py:1334
+#: code:addons/stock/stock.py:1343
 #, python-format
 msgid "Internal picking"
 msgstr "Interne Buchung"
@@ -2919,7 +3065,8 @@ msgid "To"
 msgstr "An"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Process"
 msgstr "Bestätigen"
 
@@ -2931,7 +3078,8 @@ msgstr "Revisions Name"
 #. module: stock
 #: model:ir.model,name:stock.model_stock_warehouse
 #: model:ir.ui.menu,name:stock.menu_stock_root
-#: field:product.product,warehouse_id:0 view:stock.warehouse:0
+#: field:product.product,warehouse_id:0
+#: view:stock.warehouse:0
 msgid "Warehouse"
 msgstr "Lager"
 
@@ -2951,10 +3099,15 @@ msgid "Customers Packings"
 msgstr "Kunden Lieferaufträge"
 
 #. module: stock
-#: selection:report.stock.inventory,state:0 view:report.stock.move:0
-#: selection:report.stock.move,state:0 selection:stock.inventory,state:0
-#: view:stock.move:0 selection:stock.move,state:0 view:stock.picking:0
+#: selection:report.stock.inventory,state:0
+#: view:report.stock.move:0
+#: selection:report.stock.move,state:0
+#: selection:stock.inventory,state:0
+#: view:stock.move:0
+#: selection:stock.move,state:0
+#: view:stock.picking:0
 #: selection:stock.picking,state:0
+#: report:stock.picking.list:0
 msgid "Done"
 msgstr "Erledigt"
 
@@ -2981,7 +3134,7 @@ msgid "Date done"
 msgstr "Datum erledigt"
 
 #. module: stock
-#: code:addons/stock/stock.py:1083
+#: code:addons/stock/stock.py:1089
 #, python-format
 msgid ""
 "Please put a partner on the picking list if you want to generate invoice."
@@ -3025,17 +3178,23 @@ msgstr "Lager"
 
 #. module: stock
 #: model:ir.model,name:stock.model_product_product
-#: view:report.stock.inventory:0 field:report.stock.inventory,product_id:0
-#: field:report.stock.lines.date,product_id:0 view:report.stock.move:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,product_id:0
+#: field:report.stock.lines.date,product_id:0
+#: view:report.stock.move:0
 #: field:report.stock.move,product_id:0
 #: field:stock.change.product.qty,product_id:0
 #: field:stock.inventory.line,product_id:0
-#: field:stock.inventory.line.split,product_id:0 report:stock.inventory.move:0
-#: view:stock.move:0 field:stock.move,product_id:0
-#: field:stock.move.consume,product_id:0 field:stock.move.scrap,product_id:0
+#: field:stock.inventory.line.split,product_id:0
+#: report:stock.inventory.move:0
+#: view:stock.move:0
+#: field:stock.move,product_id:0
+#: field:stock.move.consume,product_id:0
+#: field:stock.move.scrap,product_id:0
 #: field:stock.move.split,product_id:0
 #: field:stock.partial.move.line,product_id:0
-#: field:stock.partial.picking.line,product_id:0 view:stock.production.lot:0
+#: field:stock.partial.picking.line,product_id:0
+#: view:stock.production.lot:0
 #: field:stock.production.lot,product_id:0
 #: field:stock.report.prodlots,product_id:0
 #: field:stock.report.tracklots,product_id:0
@@ -3059,8 +3218,9 @@ msgid "Assigned Internal Moves"
 msgstr "Zugeordnete Interne Buchungen"
 
 #. module: stock
-#: code:addons/stock/stock.py:2379 code:addons/stock/stock.py:2440
-#: code:addons/stock/wizard/stock_partial_picking.py:141
+#: code:addons/stock/stock.py:2388
+#: code:addons/stock/stock.py:2449
+#: code:addons/stock/wizard/stock_partial_picking.py:142
 #, python-format
 msgid "Please provide Proper Quantity !"
 msgstr "Bitte eine richtige Menge angeben!"
@@ -3082,7 +3242,7 @@ msgid "Consume Products"
 msgstr "Verbrauche Produkte"
 
 #. module: stock
-#: code:addons/stock/stock.py:1742
+#: code:addons/stock/stock.py:1751
 #, python-format
 msgid "Insufficient Stock in Lot !"
 msgstr "Fehlerhafter Bestand bei Fertigungslos !"
@@ -3098,7 +3258,8 @@ msgid "Address"
 msgstr "Adresse"
 
 #. module: stock
-#: report:lot.stock.overview:0 report:lot.stock.overview_all:0
+#: report:lot.stock.overview:0
+#: report:lot.stock.overview_all:0
 msgid "Variants"
 msgstr "Varianten"
 
@@ -3113,7 +3274,8 @@ msgid "Suppliers"
 msgstr "Lieferanten"
 
 #. module: stock
-#: field:report.stock.inventory,value:0 field:report.stock.move,value:0
+#: field:report.stock.inventory,value:0
+#: field:report.stock.move,value:0
 msgid "Total Value"
 msgstr "Gesamt Wert"
 
@@ -3195,9 +3357,11 @@ msgid "Pack Reference"
 msgstr "Paket Referenz"
 
 #. module: stock
-#: view:report.stock.move:0 field:report.stock.move,location_id:0
+#: view:report.stock.move:0
+#: field:report.stock.move,location_id:0
 #: field:stock.inventory.line.split,location_id:0
-#: field:stock.move,location_id:0 field:stock.move.split,location_id:0
+#: field:stock.move,location_id:0
+#: field:stock.move.split,location_id:0
 msgid "Source Location"
 msgstr "Quelle"
 
@@ -3237,7 +3401,8 @@ msgid "Virtual Stock Value"
 msgstr "Wert errechneter  Bestand"
 
 #. module: stock
-#: view:product.product:0 view:stock.inventory.line.split:0
+#: view:product.product:0
+#: view:stock.inventory.line.split:0
 #: view:stock.move.split:0
 msgid "Lots"
 msgstr "Fertigungslose"
@@ -3258,7 +3423,7 @@ msgid "All at once"
 msgstr "Nur Gesamtmengen liefern"
 
 #. module: stock
-#: code:addons/stock/stock.py:1698
+#: code:addons/stock/stock.py:1707
 #, python-format
 msgid ""
 "Quantities, UoMs, Products and Locations cannot be modified on stock moves "
@@ -3268,7 +3433,7 @@ msgstr ""
 "modifiziert werden, die bereits durchgeführt wurden."
 
 #. module: stock
-#: code:addons/stock/product.py:445
+#: code:addons/stock/product.py:449
 #, python-format
 msgid "Future Productions"
 msgstr "Zukünftige Produktionen"
@@ -3305,7 +3470,8 @@ msgid "Moves for this production lot"
 msgstr "Buchungen für diese Produktionslos"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Put in current pack"
 msgstr "Lade in dieses Paket"
 
@@ -3353,7 +3519,8 @@ msgid "Icon"
 msgstr "Icon"
 
 #. module: stock
-#: code:addons/stock/stock.py:2311 code:addons/stock/stock.py:2726
+#: code:addons/stock/stock.py:2320
+#: code:addons/stock/stock.py:2738
 #, python-format
 msgid "UserError"
 msgstr "BenutzerFehler"
@@ -3367,8 +3534,11 @@ msgid "Tracking"
 msgstr "Seriennummer"
 
 #. module: stock
-#: view:stock.inventory.line.split:0 view:stock.move.consume:0
-#: view:stock.move.scrap:0 view:stock.move.split:0 view:stock.split.into:0
+#: view:stock.inventory.line.split:0
+#: view:stock.move.consume:0
+#: view:stock.move.scrap:0
+#: view:stock.move.split:0
+#: view:stock.split.into:0
 msgid "Ok"
 msgstr "OK"
 
@@ -3392,13 +3562,19 @@ msgid "Non European Customers"
 msgstr "Kunden ausserhalb Europas"
 
 #. module: stock
-#: code:addons/stock/product.py:75 code:addons/stock/product.py:89
-#: code:addons/stock/product.py:92 code:addons/stock/product.py:99
-#: code:addons/stock/product.py:120 code:addons/stock/product.py:146
-#: code:addons/stock/stock.py:2116 code:addons/stock/stock.py:2119
-#: code:addons/stock/stock.py:2122 code:addons/stock/stock.py:2125
-#: code:addons/stock/stock.py:2128 code:addons/stock/stock.py:2131
-#: code:addons/stock/stock.py:2445
+#: code:addons/stock/product.py:75
+#: code:addons/stock/product.py:89
+#: code:addons/stock/product.py:92
+#: code:addons/stock/product.py:99
+#: code:addons/stock/product.py:120
+#: code:addons/stock/product.py:146
+#: code:addons/stock/stock.py:2125
+#: code:addons/stock/stock.py:2128
+#: code:addons/stock/stock.py:2131
+#: code:addons/stock/stock.py:2134
+#: code:addons/stock/stock.py:2137
+#: code:addons/stock/stock.py:2140
+#: code:addons/stock/stock.py:2454
 #: code:addons/stock/wizard/stock_fill_inventory.py:47
 #: code:addons/stock/wizard/stock_splitinto.py:49
 #: code:addons/stock/wizard/stock_splitinto.py:53
@@ -3413,8 +3589,10 @@ msgstr "Wollen Sie diese Bestandsaufnahmen zusammenfassen?"
 
 #. module: stock
 #: selection:report.stock.inventory,state:0
-#: selection:report.stock.move,state:0 selection:stock.inventory,state:0
-#: selection:stock.move,state:0 selection:stock.picking,state:0
+#: selection:report.stock.move,state:0
+#: selection:stock.inventory,state:0
+#: selection:stock.move,state:0
+#: selection:stock.picking,state:0
 msgid "Cancelled"
 msgstr "Abgebrochen"
 
@@ -3424,7 +3602,8 @@ msgid "Confirmed Delivery Orders"
 msgstr "Bestätigte Auslieferungsaufträge"
 
 #. module: stock
-#: view:stock.move:0 field:stock.partial.move,picking_id:0
+#: view:stock.move:0
+#: field:stock.partial.move,picking_id:0
 #: field:stock.partial.picking,picking_id:0
 msgid "Picking"
 msgstr "Lieferschein"
@@ -3477,14 +3656,14 @@ msgstr ""
 #. module: stock
 #: code:addons/stock/wizard/stock_inventory_merge.py:43
 #: code:addons/stock/wizard/stock_inventory_merge.py:63
-#: code:addons/stock/wizard/stock_partial_picking.py:148
-#: code:addons/stock/wizard/stock_partial_picking.py:159
+#: code:addons/stock/wizard/stock_partial_picking.py:149
+#: code:addons/stock/wizard/stock_partial_picking.py:160
 #, python-format
 msgid "Warning"
 msgstr "Warnung"
 
 #. module: stock
-#: code:addons/stock/stock.py:1348
+#: code:addons/stock/stock.py:1357
 #, python-format
 msgid "is done."
 msgstr "ist erledigt"
@@ -3498,7 +3677,8 @@ msgstr "Korrekturdatum"
 #: view:board.board:0
 #: model:ir.actions.act_window,name:stock.action_outgoing_product_board
 #: model:ir.actions.act_window,name:stock.action_picking_tree
-#: model:ir.ui.menu,name:stock.menu_action_picking_tree view:stock.picking:0
+#: model:ir.ui.menu,name:stock.menu_action_picking_tree
+#: view:stock.picking:0
 msgid "Delivery Orders"
 msgstr "Warenauslieferung"
 
@@ -3518,7 +3698,8 @@ msgstr ""
 
 #. module: stock
 #: selection:report.stock.inventory,state:0
-#: selection:report.stock.move,state:0 selection:stock.inventory,state:0
+#: selection:report.stock.move,state:0
+#: selection:stock.inventory,state:0
 #: view:stock.picking:0
 msgid "Confirmed"
 msgstr "Bestätigt"
@@ -3574,19 +3755,23 @@ msgid "Total outgoing quantity"
 msgstr "Gesamte Warenausgangsmenge"
 
 #. module: stock
-#: selection:stock.move,state:0 selection:stock.picking,state:0
+#: selection:stock.move,state:0
+#: selection:stock.picking,state:0
+#: report:stock.picking.list:0
 msgid "New"
 msgstr "Neu"
 
 #. module: stock
-#: help:stock.partial.move.line,cost:0 help:stock.partial.picking.line,cost:0
+#: help:stock.partial.move.line,cost:0
+#: help:stock.partial.picking.line,cost:0
 msgid "Unit Cost for this product line"
 msgstr "Stückkosten für diese Produktlinie"
 
 #. module: stock
 #: model:ir.model,name:stock.model_product_category
 #: view:report.stock.inventory:0
-#: field:report.stock.inventory,product_categ_id:0 view:report.stock.move:0
+#: field:report.stock.inventory,product_categ_id:0
+#: view:report.stock.move:0
 #: field:report.stock.move,categ_id:0
 msgid "Product Category"
 msgstr "Produktkategorie"
@@ -3597,7 +3782,7 @@ msgid "Reporting"
 msgstr "Berichtswesen"
 
 #. module: stock
-#: code:addons/stock/stock.py:1343
+#: code:addons/stock/stock.py:1352
 #, python-format
 msgid " for the "
 msgstr " für diese "
@@ -3667,7 +3852,7 @@ msgid "Packing list"
 msgstr "Packliste"
 
 #. module: stock
-#: code:addons/stock/stock.py:738
+#: code:addons/stock/stock.py:744
 #, python-format
 msgid "Not enough stock, unable to reserve the products."
 msgstr ""
@@ -3680,12 +3865,14 @@ msgid "Customers"
 msgstr "Kundenlagerort"
 
 #. module: stock
-#: selection:stock.move,state:0 selection:stock.picking,state:0
+#: selection:stock.move,state:0
+#: selection:stock.picking,state:0
+#: report:stock.picking.list:0
 msgid "Waiting Availability"
 msgstr "Warten auf Verfügbarkeit"
 
 #. module: stock
-#: code:addons/stock/stock.py:1347
+#: code:addons/stock/stock.py:1356
 #, python-format
 msgid "is cancelled."
 msgstr "ist storniert"
@@ -3701,7 +3888,7 @@ msgid "Waiting "
 msgstr "Wartend "
 
 #. module: stock
-#: code:addons/stock/product.py:427
+#: code:addons/stock/product.py:431
 #, python-format
 msgid "Future Deliveries"
 msgstr "Zukünftige Lieferungen"
@@ -3712,12 +3899,14 @@ msgid "Additional info"
 msgstr "Zusatzinfo"
 
 #. module: stock
-#: view:stock.move:0 field:stock.move,tracking_id:0
+#: view:stock.move:0
+#: field:stock.move,tracking_id:0
 msgid "Pack"
 msgstr "Paket"
 
 #. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
 msgid "Date Expected"
 msgstr "Erwartetes Datum"
 
@@ -3815,8 +4004,10 @@ msgid "Chaining Type"
 msgstr "Lieferkette Typ"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:report.stock.move:0
-#: selection:report.stock.move,type:0 view:stock.location:0
+#: view:report.stock.inventory:0
+#: view:report.stock.move:0
+#: selection:report.stock.move,type:0
+#: view:stock.location:0
 #: selection:stock.location,chained_picking_type:0
 #: selection:stock.picking,type:0
 msgid "Internal"
@@ -3824,7 +4015,8 @@ msgstr "Intern"
 
 #. module: stock
 #: selection:report.stock.inventory,state:0
-#: selection:report.stock.move,state:0 selection:stock.inventory,state:0
+#: selection:report.stock.move,state:0
+#: selection:stock.inventory,state:0
 msgid "Draft"
 msgstr "Entwurf"
 
@@ -3856,7 +4048,7 @@ msgid "Create Invoice"
 msgstr "Erzeuge Rechnung"
 
 #. module: stock
-#: code:addons/stock/wizard/stock_return_picking.py:189
+#: code:addons/stock/wizard/stock_return_picking.py:197
 #, python-format
 msgid "Please specify at least one non-zero quantity!"
 msgstr "Bitte definieren Sie mindestens eine Anzahl, die nicht '0' ist!"
@@ -3871,7 +4063,7 @@ msgstr ""
 "Lagerorts als Quelle für Bestandsbuchungen durch die Disposition verwendet."
 
 #. module: stock
-#: code:addons/stock/stock.py:1346
+#: code:addons/stock/stock.py:1355
 #, python-format
 msgid "is ready to process."
 msgstr "ist bereit für Verarbeitung"
@@ -3903,7 +4095,8 @@ msgid "November"
 msgstr "November"
 
 #. module: stock
-#: code:addons/stock/product.py:100 code:addons/stock/stock.py:2128
+#: code:addons/stock/product.py:100
+#: code:addons/stock/stock.py:2137
 #, python-format
 msgid "There is no journal defined on the product category: \"%s\" (id: %d)"
 msgstr ""
@@ -3911,7 +4104,7 @@ msgstr ""
 "%d)"
 
 #. module: stock
-#: code:addons/stock/product.py:441
+#: code:addons/stock/product.py:445
 #, python-format
 msgid "Unplanned Qty"
 msgstr "Ungeplante Menge"
@@ -3952,14 +4145,15 @@ msgid "Move History (parent moves)"
 msgstr "Buchungshistorie (übergeordnete Buchungen)"
 
 #. module: stock
-#: code:addons/stock/product.py:423
+#: code:addons/stock/product.py:427
 #, python-format
 msgid "Future Stock"
 msgstr "Zukünftiger Lagerbestand"
 
 #. module: stock
-#: code:addons/stock/stock.py:513 code:addons/stock/stock.py:1149
-#: code:addons/stock/stock.py:1157
+#: code:addons/stock/stock.py:519
+#: code:addons/stock/stock.py:1158
+#: code:addons/stock/stock.py:1166
 #: code:addons/stock/wizard/stock_invoice_onshipping.py:112
 #, python-format
 msgid "Error"
@@ -3988,18 +4182,23 @@ msgstr ""
 #: field:stock.inventory.line,prod_lot_id:0
 #: field:stock.inventory.line.split.lines,name:0
 #: field:stock.inventory.line.split.lines,prodlot_id:0
-#: report:stock.inventory.move:0 field:stock.move,prodlot_id:0
+#: report:stock.inventory.move:0
+#: field:stock.move,prodlot_id:0
 #: field:stock.move.split.lines,name:0
 #: field:stock.move.split.lines,prodlot_id:0
 #: field:stock.partial.move.line,prodlot_id:0
-#: field:stock.partial.picking.line,prodlot_id:0 view:stock.production.lot:0
+#: field:stock.partial.picking.line,prodlot_id:0
+#: view:stock.production.lot:0
 #: field:stock.production.lot,name:0
 msgid "Production Lot"
 msgstr "Fertigungslos"
 
 #. module: stock
-#: model:ir.ui.menu,name:stock.menu_traceability view:stock.move:0
-#: view:stock.picking:0 view:stock.production.lot:0 view:stock.tracking:0
+#: model:ir.ui.menu,name:stock.menu_traceability
+#: view:stock.move:0
+#: view:stock.picking:0
+#: view:stock.production.lot:0
+#: view:stock.tracking:0
 msgid "Traceability"
 msgstr "Lieferverfolgung"
 
@@ -4010,7 +4209,8 @@ msgstr "Zu Berechnen"
 
 #. module: stock
 #: model:ir.actions.act_window,name:stock.action_location_form
-#: model:ir.ui.menu,name:stock.menu_action_location_form view:stock.picking:0
+#: model:ir.ui.menu,name:stock.menu_action_location_form
+#: view:stock.picking:0
 msgid "Locations"
 msgstr "Lagerorte"
 
@@ -4048,13 +4248,15 @@ msgstr ""
 "festgelegt, wird das bei der Produktkategorie festgelegte Konto verwendet."
 
 #. module: stock
-#: view:stock.move:0 field:stock.partial.move,move_ids:0
+#: view:stock.move:0
+#: field:stock.partial.move,move_ids:0
 #: field:stock.return.picking,product_return_moves:0
 msgid "Moves"
 msgstr "Lieferauftragspositionen"
 
 #. module: stock
-#: view:report.stock.move:0 field:report.stock.move,location_dest_id:0
+#: view:report.stock.move:0
+#: field:report.stock.move,location_dest_id:0
 #: field:stock.partial.move.line,location_dest_id:0
 #: field:stock.partial.picking.line,location_dest_id:0
 #: field:stock.picking,location_dest_id:0
@@ -4128,7 +4330,8 @@ msgid "Real"
 msgstr "Bestand"
 
 #. module: stock
-#: report:stock.picking.list:0 view:stock.production.lot.revision:0
+#: report:stock.picking.list:0
+#: view:stock.production.lot.revision:0
 #: field:stock.production.lot.revision,description:0
 msgid "Description"
 msgstr "Beschreibung"
@@ -4140,7 +4343,8 @@ msgid "May"
 msgstr "Mai"
 
 #. module: stock
-#: model:ir.actions.act_window,name:stock.action5 view:stock.tracking:0
+#: model:ir.actions.act_window,name:stock.action5
+#: view:stock.tracking:0
 msgid "Upstream traceability"
 msgstr "Lieferverfolgung Upstream"
 
@@ -4151,7 +4355,7 @@ msgid "Location Content"
 msgstr "Lagerinhalt"
 
 #. module: stock
-#: code:addons/stock/product.py:447
+#: code:addons/stock/product.py:451
 #, python-format
 msgid "Produced Qty"
 msgstr "Prod. Anzahl"
@@ -4174,7 +4378,8 @@ msgid "Stock report by production lots"
 msgstr "Bestand je Fertigungslos"
 
 #. module: stock
-#: view:stock.location:0 selection:stock.location,chained_location_type:0
+#: view:stock.location:0
+#: selection:stock.location,chained_location_type:0
 #: view:stock.move:0
 msgid "Customer"
 msgstr "Kunde"
@@ -4201,7 +4406,8 @@ msgid "Convenient Store"
 msgstr "Gemischtwarenladen"
 
 #. module: stock
-#: field:stock.location,scrap_location:0 view:stock.move.scrap:0
+#: field:stock.location,scrap_location:0
+#: view:stock.move.scrap:0
 msgid "Scrap Location"
 msgstr "Lagerort für Ausschuss"
 
@@ -4212,7 +4418,8 @@ msgid "April"
 msgstr "April"
 
 #. module: stock
-#: view:report.stock.inventory:0 view:stock.move:0
+#: view:report.stock.inventory:0
+#: view:stock.move:0
 msgid "Future"
 msgstr "Fiktiver Bestand"
 
@@ -4222,13 +4429,13 @@ msgid "Invoiced date"
 msgstr "Rechnungsdatum"
 
 #. module: stock
-#: code:addons/stock/stock.py:738
+#: code:addons/stock/stock.py:744
 #: code:addons/stock/wizard/stock_fill_inventory.py:116
 #: code:addons/stock/wizard/stock_invoice_onshipping.py:96
 #: code:addons/stock/wizard/stock_invoice_onshipping.py:98
 #: code:addons/stock/wizard/stock_return_picking.py:99
 #: code:addons/stock/wizard/stock_return_picking.py:106
-#: code:addons/stock/wizard/stock_return_picking.py:189
+#: code:addons/stock/wizard/stock_return_picking.py:197
 #, python-format
 msgid "Warning !"
 msgstr "Warnung"
@@ -4253,7 +4460,7 @@ msgid "Error ! You cannot create recursive associated members."
 msgstr "Fehler! Sie können keine rekursive assoziierte Mitglieder anlegen."
 
 #. module: stock
-#: code:addons/stock/wizard/stock_partial_picking.py:159
+#: code:addons/stock/wizard/stock_partial_picking.py:160
 #, python-format
 msgid ""
 "The rounding of the initial uom does not allow you to ship \"%s %s\", as it "
@@ -4283,8 +4490,10 @@ msgid "Optional: next stock move when chaining them"
 msgstr "Optional: Weiterer Lieferauftrag bei Lieferkette"
 
 #. module: stock
-#: view:report.stock.inventory:0 field:report.stock.inventory,year:0
-#: view:report.stock.move:0 field:report.stock.move,year:0
+#: view:report.stock.inventory:0
+#: field:report.stock.inventory,year:0
+#: view:report.stock.move:0
+#: field:report.stock.move,year:0
 msgid "Year"
 msgstr "Jahr"
 
@@ -4294,12 +4503,14 @@ msgid "Physical Locations"
 msgstr "Physikalische Lagerorte"
 
 #. module: stock
-#: view:stock.picking:0 selection:stock.picking,state:0
+#: view:stock.picking:0
+#: selection:stock.picking,state:0
 msgid "Ready to Process"
 msgstr "Bereit zur Verarbeitung"
 
 #. module: stock
-#: help:stock.location,posx:0 help:stock.location,posy:0
+#: help:stock.location,posx:0
+#: help:stock.location,posy:0
 #: help:stock.location,posz:0
 msgid "Optional localization details, for information purpose only"
 msgstr "Optionale Lagerort Details, nur als Information"
index 2016e25..94252f8 100644 (file)
@@ -513,8 +513,15 @@ class product_template(osv.osv):
             string='Stock Output Account', view_load=True,
             help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless "
                  "there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."),
+        'sale_delay': fields.float('Customer Lead Time', help="This is the average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
+        'loc_rack': fields.char('Rack', size=16),
+        'loc_row': fields.char('Row', size=16),
+        'loc_case': fields.char('Case', size=16),
     }
 
+    _defaults = {
+        'sale_delay': 7,
+    }
 product_template()
 
 class product_category(osv.osv):
index a7dff7f..3908fec 100644 (file)
             <field name="model">product.template</field>
             <field name="inherit_id" ref="product.product_template_form_view"/>
             <field name="arch" type="xml">
+               <group name="delay" position="inside">
+                       <field name="sale_delay" attrs="{'readonly':[('sale_ok','=',False)]}"/>
+               </group>
+               <group name="delay" position="after">
+                       <group name="store" string="Storage Localisation">
+                        <field name="loc_rack"/>
+                        <field name="loc_row"/>
+                       <field name="loc_case"/>
+                       </group>
+                </group>
                 <page position="after" string="Information">
                     <page string="Properties">
                         <group string="Counter-Part Locations Properties" groups="stock.group_locations">
@@ -56,7 +66,7 @@
             <field name="model">product.product</field>
             <field name="inherit_id" ref="product.product_normal_form_view"/>
             <field name="arch" type="xml">
-                <group name="procurement_help" position="after">
+                <group name="procurement_uom" position="before">
                     <group name="delay" string="Delays">
                         <label for="produce_delay" attrs="{'invisible':[('type','=','service')]}"/>
                         <div attrs="{'invisible':[('type','=','service')]}">
                         <field name="active"/>
                     </group>
                 </group>
-                <group name="inventory" position="inside">
-                    <group name="store" groups="stock.group_locations" string="Counter-Part Locations Properties">
-                        <field name="property_stock_procurement" attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','procurement')]"/>
-                        <field name="property_stock_production" attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','production')]"/>
-                        <field name="property_stock_inventory"  attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','inventory')]"/>
+                <xpath expr="//group[@string='Sale Conditions']" position="inside">
+                    <label for="sale_delay"/>
+                        <div>
+                            <field name="sale_delay" class="oe_inline"/> days
+                        </div>
+                </xpath>
+                <group name="status" position="before" version="7.0">
+                    <group string="Stock and Expected Variations" attrs="{'invisible': [('type', '=', 'service')]}" groups="base.group_user">
+                        <label for="qty_available"/>
+                            <div>
+                                <field name="qty_available" class="oe_inline"/>
+                                <button name="%(action_view_change_product_quantity)d" string="update"
+                                type="action"
+                                class="oe_link"/>
+                            </div>
+                            <field name="incoming_qty" class="oe_inline"/>
+                            <field name="outgoing_qty" class="oe_inline"/>
+                            <field name="virtual_available" class="oe_inline"/>
+                    </group>
+                    <group name="lot" groups="stock.group_tracking_lot,stock.group_production_lot" string="Lots">
+                        <field name="track_production" groups="stock.group_production_lot"/>
+                        <field name="track_incoming" groups="stock.group_tracking_lot"/>
+                        <field name="track_outgoing" groups="stock.group_tracking_lot"/>
                     </group>
                 </group>
+                <group name="status" position="after" version="7.0">
+                     <group name="store" string="Storage Localisation">
+                         <field name="company_id" groups="base.group_multi_company" widget="selection"/>
+                         <field name="loc_rack" attrs="{'invisible':[('type','=','service')]}"/>
+                         <field name="loc_row" attrs="{'invisible':[('type','=','service')]}"/>
+                         <field name="loc_case" attrs="{'invisible':[('type','=','service')]}"/>
+                     </group>
+                </group>
+                <group name="Weights" position="after">
+                     <group name="store" groups="stock.group_locations" string="Counter-Part Locations Properties">
+                         <field name="property_stock_procurement" attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','procurement')]"/>
+                         <field name="property_stock_production" attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','production')]"/>
+                         <field name="property_stock_inventory"  attrs="{'readonly':[('type','=','service')]}" domain="[('usage','=','inventory')]"/>
+                     </group>
+                </group>
             </field>
         </record>
 
                         <field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}" nolabel="1"/>
                         <button name="%(action_view_change_standard_price)d" string="- update"
                             type="action" attrs="{'invisible':[('cost_method','&lt;&gt;','average')]}"
-                            class="oe_link"/>
+                            class="oe_link" groups="product.group_costing_method"/>
                     </div>
                 </field>
             </field>
             </field>
         </record>
 
-        <record id="view_normal_stock_property_form" model="ir.ui.view">
-            <field name="name">product.normal.stock.form.inherit</field>
-            <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view"/>
-            <field name="arch" type="xml">
-                <group name="status" position="before" version="7.0">
-                    <group string="Stock and Expected Variations" attrs="{'invisible': [('type', '=', 'service')]}" groups="base.group_user">
-                        <label for="qty_available"/>
-                        <div>
-                            <field name="qty_available" class="oe_inline"/>
-                            <button name="%(action_view_change_product_quantity)d" string="update"
-                                type="action"
-                                class="oe_link"/>
-                        </div>
-                        <field name="incoming_qty" class="oe_inline"/>
-                        <field name="outgoing_qty" class="oe_inline"/>
-                        <field name="virtual_available" class="oe_inline"/>
-                    </group>
-                    <group name="lot" groups="stock.group_tracking_lot,stock.group_production_lot" string="Lots">
-                        <field name="track_production" groups="stock.group_production_lot"/>
-                        <field name="track_incoming" groups="stock.group_tracking_lot"/>
-                        <field name="track_outgoing" groups="stock.group_tracking_lot"/>
-                    </group>
-                </group>
-            </field>
-        </record>
 
         <record id="action_receive_move" model="ir.actions.act_window">
             <field name="name">Receptions</field>
index 9662eed..82c402a 100644 (file)
                 <para style="terp_default_Right_9">[[ formatLang(p['price'], dp='Account') ]]</para>
               </td>
               <td>
-                <para style="terp_default_Right_9">[[ formatLang(p['price_value'], dp='Account') ]] [[ o.company_id.currency_id.symbol]]</para>
+                <para style="terp_default_Right_9">[[ formatLang(p['price_value'], dp='Account', currency_obj = o.company_id.currency_id)]]</para>
               </td>
             </tr>
           </blockTable>
               <para style="terp_default_Bold_9">Total:</para>
             </td>
             <td>
-              <para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), dp='Account') ]] [[ o.company_id.currency_id.symbol ]]</para>
+              <para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), dp='Account', currency_obj = o.company_id.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
           </para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), dp='Account') ]] [[ o.company_id.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), dp='Account', currency_obj = o.company_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 3b2dc5f..51b93c6 100644 (file)
                 <para style="terp_default_Right_9">[[ formatLang(p['price'], dp='Account') ]]</para>
               </td>
               <td>
-                <para style="terp_default_Right_9">[[ formatLang(p['price_value'], dp='Account') ]] [[ o.company_id.currency_id.symbol]]</para>
+                <para style="terp_default_Right_9">[[ formatLang(p['price_value'], dp='Account', currency_obj = o.company_id.currency_id)]]</para>
               </td>
             </tr>
           </blockTable>
               <para style="terp_default_Bold_9">Total:</para>
             </td>
             <td>
-              <para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), dp='Account') ]] [[ o.company_id.currency_id.symbol ]]</para>
+              <para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), dp='Account', currency_obj = o.company_id.currency_id) ]]</para>
             </td>
           </tr>
         </blockTable>
           </para>
         </td>
         <td>
-          <para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), dp='Account') ]] [[ o.company_id.currency_id.symbol ]]</para>
+          <para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), dp='Account', currency_obj = o.company_id.currency_id) ]]</para>
         </td>
       </tr>
     </blockTable>
index 9b53ffd..4f3e256 100644 (file)
@@ -13,7 +13,7 @@
         <field name="name">report.stock.move.tree</field>
         <field name="model">report.stock.move</field>
         <field name="arch" type="xml">
-            <tree string="Moves Analysis">
+            <tree string="Moves Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="year" invisible="1" />
                 <field name="month" invisible="1"/>
         <field name="name">report.stock.inventory.tree</field>
         <field name="model">report.stock.inventory</field>
         <field name="arch" type="xml">
-            <tree string="Inventory Analysis">
+            <tree string="Inventory Analysis" create="false">
                 <field name="date" invisible="1"/>
                 <field name="year" invisible="1" />
                 <field name="month" invisible="1"/>
index f87a212..f56d738 100644 (file)
@@ -20,7 +20,7 @@
             <field name="name">report.stock.lines.date.tree</field>
             <field name="model">report.stock.lines.date</field>
             <field name="arch" type="xml">
-                <tree string="Dates of Inventories">
+                <tree string="Dates of Inventories" create="false">
                     <field name="product_id"/>
                     <field name="date" />
                 </tree>
index 91e300e..765599a 100644 (file)
@@ -1767,7 +1767,7 @@ class stock_move(osv.osv):
             location_id = property_out and property_out.id or False
         else:
             location_xml_id = False
-            if picking_type == 'in':
+            if picking_type in ('in', 'internal'):
                 location_xml_id = 'stock_location_stock'
             elif picking_type == 'out':
                 location_xml_id = 'stock_location_customers'
@@ -1798,7 +1798,7 @@ class stock_move(osv.osv):
             location_xml_id = False
             if picking_type == 'in':
                 location_xml_id = 'stock_location_suppliers'
-            elif picking_type == 'out':
+            elif picking_type in ('out', 'internal'):
                 location_xml_id = 'stock_location_stock'
             if location_xml_id:
                 location_model, location_id = mod_obj.get_object_reference(cr, uid, 'stock', location_xml_id)
@@ -2011,25 +2011,17 @@ class stock_move(osv.osv):
         @return: Dictionary of values
         """
         mod_obj = self.pool.get('ir.model.data')
-        location_source_id = False
-        location_dest_id = False
+        location_source_id = 'stock_location_stock'
+        location_dest_id = 'stock_location_stock'
         if type == 'in':
             location_source_id = 'stock_location_suppliers'
             location_dest_id = 'stock_location_stock'
         elif type == 'out':
             location_source_id = 'stock_location_stock'
             location_dest_id = 'stock_location_customers'
-        if location_source_id:
-            try:
-                location_model, location_source_id = mod_obj.get_object_reference(cr, uid, 'stock', location_source_id)
-            except ValueError, e:
-                location_source_id = False
-        if location_dest_id:
-            try:
-                location_model, location_dest_id = mod_obj.get_object_reference(cr, uid, 'stock', location_dest_id)
-            except ValueError, e:
-                location_dest_id = False
-        return {'value':{'location_id': location_source_id, 'location_dest_id': location_dest_id}}
+        source_location = mod_obj.get_object_reference(cr, uid, 'stock', location_source_id)
+        dest_location = mod_obj.get_object_reference(cr, uid, 'stock', location_dest_id)
+        return {'value':{'location_id': source_location and source_location[1] or False, 'location_dest_id': dest_location and dest_location[1] or False}}
 
     def onchange_date(self, cr, uid, ids, date, date_expected, context=None):
         """ On change of Scheduled Date gives a Move date.
index 93f488c..99565f0 100644 (file)
@@ -31,7 +31,6 @@
     name: Ice Cream
     type: product
     categ_id: product.product_category_1
-    supply_method: buy
     list_price: 100.0
     standard_price: 70.0
     uom_id: product.product_uom_kgm
index 1a3f8e5..3294251 100644 (file)
                     </group>
                     <notebook>
                         <page string="Products">
-                            <field name="move_lines" context="{'address_in_id': partner_id, 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/>
+                            <field name="move_lines" context="{'address_in_id': partner_id, 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree', 'picking_type': 'internal'}"/>
                             <field name="note" placeholder="Add an internal note..." class="oe_inline"/>
                         </page>
                         <page string="Additional Info">
         <field name="act_window_id" ref="action_move_form2"/>
         </record>
 
-        <menuitem action="action_move_form2" id="menu_action_move_form2" parent="menu_traceability" sequence="3"/>
+        <menuitem action="action_move_form2" id="menu_action_move_form2" parent="menu_traceability" sequence="3" groups="stock.group_locations"/>
 
         <!--
             Reception Picking (By Stock Move)
index fb8e327..abe1754 100644 (file)
@@ -72,7 +72,7 @@ class stock_return_picking(osv.osv_memory):
                     res.update({'invoice_state': 'none'})
             return_history = self.get_return_history(cr, uid, record_id, context)       
             for line in pick.move_lines:
-                qty = line.product_qty - return_history[line.id]
+                qty = line.product_qty - return_history.get(line.id, 0)
                 if qty > 0:
                     result1.append({'product_id': line.product_id.id, 'quantity': qty,'move_id':line.id})
             if 'product_return_moves' in fields:
@@ -100,8 +100,8 @@ class stock_return_picking(osv.osv_memory):
             valid_lines = 0
             return_history = self.get_return_history(cr, uid, record_id, context)
             for m  in pick.move_lines:
-                if m.product_qty * m.product_uom.factor > return_history[m.id]:
-                        valid_lines += 1
+                if m.state == 'done' and m.product_qty * m.product_uom.factor > return_history.get(m.id, 0):
+                    valid_lines += 1
             if not valid_lines:
                 raise osv.except_osv(_('Warning!'), _("No products to return (only lines in Done state and not fully returned yet can be returned)!"))
         return res
index 840e6c8..419118c 100644 (file)
@@ -115,9 +115,9 @@ class procurement_order(osv.osv):
             if proc.move_id:
                 move_obj.write(cr, uid, [proc.move_id.id],
                     {'location_id':proc.location_id.id})
-            self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d') % proc_id})
-            self.running_send_note(cr, uid, [proc.id], context=context)
-
+            msg = _('Pulled from another location.')
+            self.write(cr, uid, [proc.id], {'state':'running', 'message': msg})
+            self.message_post(cr, uid, [proc.id], body=msg, context=context)
             # trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed)
             wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
         return False
index 9fb2b70..a5a96ef 100644 (file)
@@ -5,7 +5,7 @@
         <record model="ir.ui.view" id="view_product_form_auto_pick">
             <field name="name">product.normal.auto_pick.form</field>
             <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view" />
+            <field name="inherit_id" ref="procurement.product_form_view_procurement_button"/>
             <field name="arch" type="xml">
                 <field name="product_manager" position="after">
                     <field name="auto_pick" />
index fd12ce5..d88dc81 100644 (file)
@@ -41,7 +41,7 @@
         <record id="product_warning_form_view" model="ir.ui.view">
             <field name="name">product.warning.form.inherit</field>
             <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view"/>
+            <field name="inherit_id" ref="procurement.product_template_form_view_procurement"/>
             <field name="arch" type="xml">
                 <notebook position="inside">
                     <page string="Warnings">