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.:
" 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
"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
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
msgid "System payment"
-msgstr "Zahlungssystematik"
+msgstr "Zahlungsmothode"
#. module: account
#: view:account.journal:0
"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
#. 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
#. 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
#: 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
#. module: account
#: view:account.move:0
msgid "Total Debit"
-msgstr "Summe Soll"
+msgstr "Forderungsgesamtsumme"
#. module: account
#: view:account.unreconcile:0
"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."
"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
#: 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
#: field:account.move,ref:0
#: field:account.move.line,ref:0
#: field:account.subscription,ref:0
+#: xsl:account.transfer:0
msgid "Reference"
msgstr "Referenz"
"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"
#: 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
"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
"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
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
"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
#. 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
#. 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
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
"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
"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
#. module: account
#: view:account.installer:0
msgid "Configure"
-msgstr "Konfigurieren"
+msgstr "Einrichten"
#. module: account
#: selection:account.entries.report,month:0
#. 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
#: 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
"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
#. 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
"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
"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
#. 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
#: 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
#. 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
#: 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
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
#: 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
#. 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."
msgstr "Steuerbetrag"
#. module: account
-#: code:addons/account/account.py:3116
+#: code:addons/account/account.py:3133
#, python-format
msgid "SAJ"
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 ""
"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
#. 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"
#: 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"
#: 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"
#. 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
#: 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
"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
#: 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
"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
#: 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
#. 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 "
"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
#. 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
#. 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
"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"
#: 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
#. 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
"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
"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 !"
#. 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
#. 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"
#. 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
"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
#. 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
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
#. 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
#: 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
#. 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 "
#. module: account
#: field:account.move.line.reconcile,trans_nbr:0
msgid "# of Transaction"
-msgstr "# Transaktionen"
+msgstr "Transaktionsnummer"
#. module: account
#: report:account.general.ledger:0
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
#. module: account
#: view:account.subscription:0
msgid "Draft Subscription"
-msgstr "Entwurf Abonnement"
+msgstr "Abonnement im Entwurf"
#. module: account
#: view:account.account:0
#. 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
#: 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
#. 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"
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
#. 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
#: 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
#. module: account
#: view:account.entries.report:0
msgid "# of Entries "
-msgstr "# Einzelposten "
+msgstr "Anz. Positionen "
#. module: account
#: help:account.fiscal.position,active:0
"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
#: 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
#. 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
#: 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
#. 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
#: 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
"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
#: 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
#. 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
"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
#. 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."
#. 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
#: 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
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
#. module: account
#: model:process.node,name:account.process_node_draftstatement0
msgid "Draft statement"
-msgstr "Beleg Entwurf"
+msgstr "Belegentwurf"
#. module: account
#: view:account.tax:0
#. 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
#. 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
#, 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
#. 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
"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
"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
"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
#: 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
"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
#. module: account
#: view:account.journal:0
msgid "Validations"
-msgstr "Prüfvorgänge"
+msgstr "Prüfungen"
#. module: account
#: view:account.entries.report:0
"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
#: 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"
#. 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"
msgstr "Buchungstext"
#. module: account
-#: code:addons/account/account.py:3119
+#: code:addons/account/account.py:3136
#, python-format
msgid "ECNJ"
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
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 ""
#. 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
#: 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
#. 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"
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 "
#: 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
#: 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
#: 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"
#: 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
#. 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
msgstr "Buchungsvorlage"
#. module: account
-#: code:addons/account/account.py:3117
+#: code:addons/account/account.py:3134
#, python-format
msgid "EXJ"
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
#. 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
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
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
#: 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
#. 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
#: 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
#. 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"
#. 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
"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
#. 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 "
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."
#. 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
#: 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
#. 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
#. 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
#. 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
"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
#. 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
#: 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
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"
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
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
"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
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!"
#. 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
#: 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
"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
#. 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
#: 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
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"
#. 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
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
#. 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
#: 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"
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 "
"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!"
#: 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"
#: 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
#. 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
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!"
#. 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
#. 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
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 "
#: 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
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 ""
"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
#. 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
"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
"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
#. module: account
#: field:account.chart,period_from:0
msgid "Start period"
-msgstr "Beginn der Periode"
+msgstr "Periodenbeginn"
#. module: account
#: field:account.tax,name:0
"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
#. 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
#. 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
"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
#: 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
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
#. 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
#: 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
#. 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 ""
#. module: account
#: view:res.partner:0
msgid "Customer Accounting Properties"
-msgstr "Debitoren Eigenschaften"
+msgstr "Debitoren-Eigenschaften"
#. module: account
#: help:res.company,paypal_account:0
#. 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
"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
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."
#. 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"
#. 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
#. 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
#: 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
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
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
#: 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"
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 "
"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
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"
#: 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"
#: 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
#. 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
"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
#. 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
#: selection:account.invoice,state:0
#: report:account.overdue:0
msgid "Paid"
-msgstr "bezahlt"
+msgstr "Bezahlt"
#. module: account
#: view:account.period.close:0
#. 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
#. 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
#: 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"
#: 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
"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
#: 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
#. 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"
#. 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
"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
#. 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
#: 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
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!"
#. 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
#. 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"
#. module: account
#: view:account.financial.report:0
msgid "Report"
-msgstr "Report"
+msgstr "Bericht"
#. module: account
#: view:account.analytic.line:0
#: 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"
#: 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
#. 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
#. module: account
#: view:account.bank.statement:0
msgid "Transaction"
-msgstr "Transaktion"
+msgstr "Geschäftsvorfall"
#. module: account
#: help:account.tax,base_code_id:0
#: 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
#. 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
#. 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
"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"
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
#. 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
#: 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
#. module: account
#: view:account.invoice:0
msgid "Payment Date"
-msgstr "Datum Zahlung"
+msgstr "Zahlungsdatum"
#. module: account
#: view:account.analytic.account:0
"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
#: 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
"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
"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
"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
"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"
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."
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"
#: 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"
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"
#: 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"
#. 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
"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
"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."
"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
#: 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
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
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!"
#: 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
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
#. 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
#. 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
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"
"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"
"\"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
#: 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
"(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
#. module: account
#: field:product.template,taxes_id:0
msgid "Customer Taxes"
-msgstr "Produkt Steuern"
+msgstr "Umsatzsteuern"
#. module: account
#: help:account.model,name:0
#: 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
#: 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
"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
"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
#. module: account
#: view:account.move.line.reconcile.writeoff:0
msgid "Information addendum"
-msgstr "Informationsbeilage"
+msgstr "Informationsanhang"
#. module: account
#: field:account.chart,fiscalyear:0
#. 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
#. 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
#. 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"
#. 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
"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
#. 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
"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
"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."
#. 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
#: 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
#: 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
#. 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
"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
#. 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
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: "
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"
"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
#. 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
"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
#. 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
#: 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
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
"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
"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
#: 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
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 "
"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
"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
#. 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
#. 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
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 "
"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
#: 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
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 !"
"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
"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
#. module: account
#: model:ir.model,name:account.model_accounting_report
msgid "Accounting Report"
-msgstr "Report Finanzen"
+msgstr "Finanzbericht"
#. module: account
#: report:account.invoice:0
#: 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
"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 "
#. 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
"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
#. module: account
#: view:account.tax.template:0
msgid "Account Tax Template"
-msgstr "Umsatzsteuer Vorlage"
+msgstr "Umsatzsteuer-Vorlage"
#. module: account
#: view:account.journal.select:0
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 "
#. 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"
#. 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
#. 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
#. 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
#. 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
#. 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
"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
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
#: 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
"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
#. 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
#. 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"
#: 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
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 ":"
#. 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
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!"
#: 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
"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
#. 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
#. 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"
#: 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
#. 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
#: 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
#. module: account
#: view:account.financial.report:0
msgid "Parent Report"
-msgstr "Ãœbergeordneter Report"
+msgstr "Ãœbergeordneter Bericht"
#. module: account
#: view:account.state.open:0
#. 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
#. 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
"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
#. module: account
#: selection:account.tax.template,type:0
msgid "Fixed"
-msgstr "Fest"
+msgstr "Fix"
#. module: account
#: code:addons/account/account.py:629
#: 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
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."
#: 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
"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
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
#. 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
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!"
"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
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
#. 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
"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
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
#: 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
#. 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
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"
#: 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
#. 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
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%%"
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
#. 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
#. 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
#. 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
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
#. 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
"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
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
"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"
#. 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
#: 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!"
#. 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
"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
#: 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"
"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
"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
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"
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
msgstr "Zeige Detail"
#. module: account
-#: code:addons/account/account.py:3118
+#: code:addons/account/account.py:3135
#, python-format
msgid "SCNJ"
msgstr "GSV"
#: 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"
#: 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
#. module: account
#: field:account.aged.trial.balance,direction_selection:0
+#: report:account.aged_trial_balance:0
msgid "Analysis Direction"
msgstr "Analysezeitraum"
#. 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"
#. module: account
#: report:account.overdue:0
msgid "Best regards."
-msgstr "Beste Grüsse."
+msgstr "Mit freundlichen Grüssen."
#. module: account
#: view:account.invoice:0
#: 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
"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"
#: 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
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
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 "
#: 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
#. 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
"\"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
#. module: account
#: report:account.overdue:0
msgid "Maturity date"
-msgstr "Datum Fällig"
+msgstr "Fälligkeitsdatum"
#. module: account
#: view:account.subscription:0
#. 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
#: 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
#: 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
#: 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!"
#. 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
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"
#. 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
#. 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
#: 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
#: 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
#. 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
#: selection:account.move,state:0
#: view:account.move.line:0
msgid "Posted"
-msgstr "Gebucht"
+msgstr "Quittiert"
#. module: account
#: report:account.account.balance:0
#: 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
#: 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
#. 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 ""
#. 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
#. 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
#, 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 "
#. 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
#: 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
#: 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
#: 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
#. 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
#. 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
#. 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
#: 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
#. 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"
"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"
"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"
#. 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
#. 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!"
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."
"''}${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"
" ${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"
"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"
#. module: account
#: field:res.partner,credit:0
msgid "Total Receivable"
-msgstr "Gesamt Forderungen"
+msgstr "Forderungsgesamtsumme"
#. module: account
#: view:account.account:0
#. 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
#. 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
#~ 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."
#~ 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"
#~ msgid "Receivable Accounts"
#~ msgstr "Debitorenkonten"
-#~ msgid "Tax codes"
-#~ msgstr "Umsatzsteuererklärung"
-
#~ msgid ""
#~ "Streamlines invoice payment and creates hooks to plug automated payment "
#~ "systems in."
#~ 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 ""
#~ 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"
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
</group>
<group>
- <field name="property_account_expense" domain="[('type','<>','view'),('type','<>','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','<>','view'),('type','<>','consolidation')]" />
+ <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
</group>
</group>
</page>
<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>
<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>
<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>
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()
<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"/>
<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"/>
<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"/>
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:
<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') > 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') > 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'] < 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'] < 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">
<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"/>
"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
#. 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
"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
<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"/>
<?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
'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','')
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 = []
</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>
</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>
</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/>
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
})
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')
<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>
<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>
'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,
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])
<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>
<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"/>
<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"/>
}
_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):
'</div>'
].join('')
},
- })).get(0).scrollIntoView();
+ }));
},
});
// FSM-ize DataImport
'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
<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"/>
<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"/>
<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"/>
'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:
<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"/>
'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.
<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"/>
<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"/>
<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"/>
<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"/>
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.
_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
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)
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
<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>
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
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"
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}
<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>
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),
'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,
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,
month,
e.register_max,
name_registration
-
- )
- """)
+ )
+ """)
report_event_registration()
<?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"/>
</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>
</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"/>
width:256px;
border: 1px solid #eeeeee;
}
+.oe_unsubscribe, .oe_unsubscribe_button:hover span {
+ display: none;
+ }
+.oe_unsubscribe_button:hover .oe_unsubscribe {
+ display: inline;
+ }
<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>
'category': 'Tools',
'installable': True,
'auto_install': False,
- 'web': True,
'js': ['static/src/js/gdocs.js'],
'data': [
'security/ir.model.access.csv',
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'
<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>
<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"/>
<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"/>
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()
<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>
<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>
<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"/>
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
<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>
<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>
</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>
</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>
_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),
}
_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):
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,
}
</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"/>
<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"/>
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
"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
#. 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
<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"/>
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:
<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>
<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>
<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"/>
<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"/>
</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>
</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>
<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">
</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>
</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>
'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):
'date': lambda *a: fields.datetime.now(),
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
'body': '',
+ 'is_private': True,
}
#------------------------------------------------------
'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
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
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
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
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:
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)):
<field name="name">Inbox</field>
<field name="tag">mail.wall</field>
<field name="params" eval=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', True)],
- 'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
+ 'context': {'default_model': 'res.partner'} }""/>
</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=""{'domain': [('notification_ids.partner_id.user_ids', 'in', [uid]),('unread', '=', False)],
- 'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
+ 'context': {'default_model': 'res.partner'} }""/>
</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=""{'domain': [('author_id.user_ids', 'in', [uid])],
- 'context': {'default_model': 'res.users', 'default_res_id': uid} }""/>
+ 'context': {'default_model': 'res.partner'} }""/>
</record>
</data>
</openerp>
: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 \
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')
'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)
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):
</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>
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;
+}
+
/* ------------------------------ */
-/* 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
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);
},
});
}
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> ')
+ }
};
* 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
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] ;
-
},
* @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;
},
* - 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
* @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;
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 || [];
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 ) {
* 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);
// 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;
},
if(this.thread){
return false;
}
+ var param = _.extend(self, {'parent_id': self.id});
/*create thread*/
self.thread = new mail.Thread(self, {
'domain': self.domain,
'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*/
} else {
self.destroy();
}
- for(var i in this.thread.messages){
- this.thread.messages[i].animated_destroy({fadeTime:0});
- }
},
on_message_delete: function (event) {
*/
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;
},
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);
},
});
* ------------------------------------------------------------
*
* 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',
* @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
* @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);
// 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,
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 = [];
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();
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();
+ }
+ }
+ }
},
/**
* 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
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
* @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
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'));
},
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,
});
}
- 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 () {
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() {
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);
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') );
},
});
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');
},
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);
},
});
},
- /** 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(); });
+ }
});
};
this._check_visibility();
this.reinit();
this.bind_events();
+ this.display_subtypes();
},
_check_visibility: function() {
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 = {
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;
},
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 () {
$(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);
+ });
+ }
+
},
});
<?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<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>0?'':'display:none;'}"/>
+ <div t-attf-style="{attachment.percent_loaded>20?'':'display:none;'}"/>
+ <div t-attf-style="{attachment.percent_loaded>40?'':'display:none;'}"/>
+ <div t-attf-style="{attachment.percent_loaded>60?'':'display:none;'}"/>
+ <div t-attf-style="{attachment.percent_loaded>80?'':'display:none;'}"/>
+ </div>
+ <t t-raw="attachment.name || attachment.filename"/>
+ </span>
+ <a t-if="(!attachment.upload or attachment.percent_loaded>=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>=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&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"><<<</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&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&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<=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}&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>
<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">
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
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):
<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>
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"/>
<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"/>
<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"/>
'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
===========================================
"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
#. module: mrp
#: field:mrp.routing,code:0
msgid "Code"
-msgstr "Kurzbezeichnung"
+msgstr "Kurzbez."
#. module: mrp
#: report:mrp.production.order:0
<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','<>','make_to_order'),('supply_method','<>','produce')]}">
+ <p attrs="{'invisible': ['|','|',('type','=','service'),('procure_method','<>','make_to_order'),('supply_method','<>','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>
_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):
'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()
<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"/>
<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>
'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):
<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>
if res:
return res[0]['bal']
else:
- return False
+ return 0
def _get_sub_total(self, user, data, date):
res={}
</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>
<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>
<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>
<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>
<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"/>
<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>
<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>
<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>
<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>
<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" />
'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,
'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([
""" 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):
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.")
"""
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):
@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):
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)
})
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"
'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules'),
}
-product_product()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
--- /dev/null
+<?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
<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','<>','service'),('procure_method','<>','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','<>','product'),('procure_method','<>','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','<>','consu'),('procure_method','<>','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>
_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'\
'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 = {
'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."),
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'),
'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),
}
_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):
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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
<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
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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"/>
<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"/>
<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','<>','service'),('procure_method','<>','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','<>','product'),('procure_method','<>','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','<>','consu'),('procure_method','<>','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 & 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>
<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" />
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)
}
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,
<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"/>
<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"/>
<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"/>
</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','<>','service'),('procure_method','<>','make_to_order'),('supply_method','<>','produce')]}">
+ <p attrs="{'invisible': ['|','|',('type','<>','service'),('procure_method','<>','make_to_order'),('supply_method','<>','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.
##############################################################################
from osv import fields, osv
+from tools.translate import _
class procurement_order(osv.osv):
_name = "procurement.order"
'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:
}
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):
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:
<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>
<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','<>','service'),('procure_method','<>','make_to_order'),('supply_method','<>','buy')]}">
+ <p attrs="{'invisible': ['|','|',('type','<>','service'),('procure_method','<>','make_to_order'),('supply_method','<>','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','<>','make_to_order'),('supply_method','<>','buy')]}">
+ <p attrs="{'invisible': ['|','|',('type','=','service'),('procure_method','<>','make_to_order'),('supply_method','<>','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','<>','view'),('type','<>','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>
<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"/>
<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"/>
<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">
<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"/>
<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"/>
'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."),
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',
<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>
'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)]},
_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),
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
</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>
<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>
'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,
--- /dev/null
+<?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>
_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'."),
<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"/>
<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}"
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
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
"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
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"
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"
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"
"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"
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"
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"
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"
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"
"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 ""
"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 !"
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 "
"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"
#. 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"
"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"
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 "["
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: "
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."
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:"
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"
msgstr "Zieladresse "
#. module: stock
-#: code:addons/stock/stock.py:1333
+#: code:addons/stock/stock.py:1342
#, python-format
msgid "Reception"
msgstr "Annahme"
"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"
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: "
#. 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"
#: 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"
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"
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"
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"
#: 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"
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"
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."
"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"
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"
msgstr "Lagerbestandskonto"
#. module: stock
-#: code:addons/stock/stock.py:1349
+#: code:addons/stock/stock.py:1358
#, python-format
msgid "is waiting."
msgstr "ist unerledigt"
msgstr "Autor"
#. module: stock
-#: code:addons/stock/stock.py:1332
+#: code:addons/stock/stock.py:1341
#, python-format
msgid "Delivery Order"
msgstr "Lieferauftrag"
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 "
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 "
#. 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"
#. 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"
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"
#. module: stock
#: selection:stock.move,state:0
+#: report:stock.picking.list:0
msgid "Waiting Another Move"
msgstr "Erwarte eine andere Buchung"
"(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..."
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"
"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"
#. 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"
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"
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"
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."
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"
"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"
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"
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"
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"
#. 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"
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"
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"
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..."
#. module: stock
#: field:stock.incoterms,code:0
msgid "Code"
-msgstr "Kurzbezeichnung"
+msgstr "Kurzbez."
#. module: stock
#: view:stock.inventory.line.split:0
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"
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"
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"
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"
"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 "
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: "
"\"%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"
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"
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 "]"
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"
"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..."
msgstr "Bestandsaufnahme"
#. module: stock
-#: code:addons/stock/stock.py:1341
+#: code:addons/stock/stock.py:1350
#, python-format
msgid "Document"
msgstr "Dokument"
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"
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"
#: 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"
#. 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."
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"
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"
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"
"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."
msgstr "Erstellen"
#. module: stock
-#: view:stock.move:0 view:stock.picking:0
+#: view:stock.move:0
+#: view:stock.picking:0
msgid "Dates"
msgstr "Datumsangaben"
#. 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"
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
#. 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 !"
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' ."
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"
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"
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"
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"
"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 ""
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"
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."
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."
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"
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!"
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:"
msgstr "Inventurauftrag"
#. module: stock
-#: code:addons/stock/stock.py:1334
+#: code:addons/stock/stock.py:1343
#, python-format
msgid "Internal picking"
msgstr "Interne Buchung"
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"
#. 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"
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"
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."
#. 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
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!"
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 !"
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"
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"
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"
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"
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 "
"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"
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"
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"
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"
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
#. 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"
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"
#. 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"
#: 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"
#. 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"
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"
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 "
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 ""
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"
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"
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"
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"
#. 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"
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!"
"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"
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 ""
"%d)"
#. module: stock
-#: code:addons/stock/product.py:441
+#: code:addons/stock/product.py:445
#, python-format
msgid "Unplanned Qty"
msgstr "Ungeplante Menge"
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"
#: 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"
#. 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"
"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
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"
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"
msgstr "Lagerinhalt"
#. module: stock
-#: code:addons/stock/product.py:447
+#: code:addons/stock/product.py:451
#, python-format
msgid "Produced Qty"
msgstr "Prod. Anzahl"
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"
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"
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"
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"
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 "
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"
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"
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):
<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">
<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','<>','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>
<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>
<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>
<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"/>
<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>
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'
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)
@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.
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
</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)
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:
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
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
<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" />
<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">