[MERGE] merged with trunk development branch

bzr revid: hmo@tinyerp.com-20111130074138-0tsvucwct4mnrjya
This commit is contained in:
Harry (OpenERP) 2011-11-30 13:11:38 +05:30
commit 600713c6eb
56 changed files with 929 additions and 615 deletions

View File

@ -141,7 +141,6 @@ module named account_voucher.
'test/account_change_currency.yml',
'test/chart_of_account.yml',
'test/account_period_close.yml',
'test/account_fiscalyear_close_state.yml',
'test/account_use_model.yml',
'test/account_validate_account_move.yml',
'test/account_fiscalyear_close.yml',
@ -149,6 +148,7 @@ module named account_voucher.
'test/account_cash_statement.yml',
'test/test_edi_invoice.yml',
'test/account_report.yml',
'test/account_fiscalyear_close_state.yml', #last test, as it will definitively close the demo fiscalyear
],
'installable': True,
'active': False,

View File

@ -1,31 +1,8 @@
-
In order to check the Close a Fiscal Year wizard in OpenERP I first create a Fiscalyear
-
!record {model: account.fiscalyear, id: account_fiscalyear_fiscalyear0}:
code: !eval "'FY%s'% (datetime.now().year+1)"
company_id: base.main_company
date_start: !eval "'%s-01-01' %(datetime.now().year+1)"
date_stop: !eval "'%s-12-31' %(datetime.now().year+1)"
name: !eval "'Fiscal Year %s' %(datetime.now().year+1)"
-
I create monthly Periods for this fiscalyear
-
!python {model: account.fiscalyear}: |
self.create_period(cr, uid, [ref("account_fiscalyear_fiscalyear0")], {"lang":
'en_US', "active_model": "ir.ui.menu", "active_ids": [ref("account.menu_action_account_fiscalyear_form")],
"tz": False, "active_id": ref("account.menu_action_account_fiscalyear_form"),
})
-
I check that the fiscalyear state is "Draft"
-
!assert {model: account.fiscalyear, id: account_fiscalyear_fiscalyear0, string: Fiscal Year is in Draft state}:
- state == 'draft'
-
I run the Close a Fiscalyear wizard to close this fiscalyear
I run the Close a Fiscalyear wizard to close the demo fiscalyear
-
!record {model: account.fiscalyear.close.state, id: account_fiscalyear_close_state_0}:
fy_id: account_fiscalyear_fiscalyear0
fy_id: data_fiscalyear
-
I clicked on Close States Button to close fiscalyear
@ -37,9 +14,6 @@
-
I check that the fiscalyear state is now "Done"
-
!assert {model: account.fiscalyear, id: account_fiscalyear_fiscalyear0, string: Fiscal Year is in Done state}:
!assert {model: account.fiscalyear, id: data_fiscalyear, string: Fiscal Year is in Done state}:
- state == 'done'

View File

@ -8,31 +8,31 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-24 12:54+0000\n"
"PO-Revision-Date: 2011-07-12 12:04+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2011-11-29 08:00+0000\n"
"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n"
"X-Generator: Launchpad (build 14231)\n"
"X-Launchpad-Export-Date: 2011-11-30 05:27+0000\n"
"X-Generator: Launchpad (build 14404)\n"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_normal
msgid "Open Assets"
msgstr ""
msgstr "Anlage (Entwurf)"
#. module: account_asset
#: field:account.asset.property,method_end:0
#: field:account.asset.property.history,method_end:0
msgid "Ending date"
msgstr ""
msgstr "Ende Datum"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation board"
msgstr ""
msgstr "Abschreibungs-Tableau"
#. module: account_asset
#: view:account.asset.asset:0
@ -45,61 +45,61 @@ msgstr ""
#: model:ir.model,name:account_asset.model_account_asset_asset
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_form
msgid "Asset"
msgstr ""
msgstr "Anlagegüter"
#. module: account_asset
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Ungültiger Modellname in der Aktionsdefinition."
#. module: account_asset
#: selection:account.asset.property,method:0
msgid "Linear"
msgstr ""
msgstr "Linear"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Change duration"
msgstr ""
msgstr "Verändere Lebensdauer"
#. module: account_asset
#: field:account.asset.asset,child_ids:0
msgid "Child assets"
msgstr ""
msgstr "untergeordnete Anlagengüter"
#. module: account_asset
#: field:account.asset.board,value_asset:0
msgid "Asset Value"
msgstr ""
msgstr "Anlagenwert"
#. module: account_asset
#: wizard_field:account.asset.modify,init,name:0
msgid "Reason"
msgstr ""
msgstr "Begründung"
#. module: account_asset
#: view:account.asset.asset:0
#: field:account.asset.asset,entry_ids:0
#: wizard_field:account.asset.compute,asset_compute,move_ids:0
msgid "Entries"
msgstr ""
msgstr "Buchungen"
#. module: account_asset
#: wizard_view:account.asset.compute,asset_compute:0
msgid "Generated entries"
msgstr ""
msgstr "erzeugte Buchungen"
#. module: account_asset
#: wizard_field:account.asset.modify,init,method_delay:0
#: field:account.asset.property,method_delay:0
#: field:account.asset.property.history,method_delay:0
msgid "Number of interval"
msgstr ""
msgstr "Anzahl der Intervalle"
#. module: account_asset
#: wizard_button:account.asset.compute,asset_compute,asset_open:0
msgid "Open entries"
msgstr ""
msgstr "offene Buchungen"
#. module: account_asset
#: view:account.asset.asset:0
@ -108,102 +108,102 @@ msgstr ""
#: model:ir.ui.menu,name:account_asset.menu_finance_Assets
#: model:ir.ui.menu,name:account_asset.menu_finance_config_Assets
msgid "Assets"
msgstr ""
msgstr "Anlagegüter"
#. module: account_asset
#: selection:account.asset.property,method:0
msgid "Progressive"
msgstr ""
msgstr "Progressiv"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_draft
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_draft
msgid "Draft Assets"
msgstr ""
msgstr "Anlagegüter (Entwurf)"
#. module: account_asset
#: wizard_view:account.asset.modify,init:0
#: wizard_field:account.asset.modify,init,note:0
#: view:account.asset.property.history:0
msgid "Notes"
msgstr ""
msgstr "Bemerkungen"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Change history"
msgstr ""
msgstr "Bearbeitungshistorie"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation entries"
msgstr ""
msgstr "Abschreibungsbuchungen"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Methods"
msgstr ""
msgstr "Methoden"
#. module: account_asset
#: wizard_view:account.asset.modify,init:0
msgid "Asset properties to modify"
msgstr ""
msgstr "zu verändernde Anlagenmerkmale"
#. module: account_asset
#: field:account.asset.asset,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Partner"
#. module: account_asset
#: wizard_field:account.asset.modify,init,method_period:0
#: field:account.asset.property,method_period:0
#: field:account.asset.property.history,method_period:0
msgid "Period per interval"
msgstr ""
msgstr "Perioden pro Intervall"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation duration"
msgstr ""
msgstr "Abschreibungsdauer"
#. module: account_asset
#: field:account.asset.property,account_analytic_id:0
msgid "Analytic account"
msgstr ""
msgstr "Analytisches Konto"
#. module: account_asset
#: field:account.asset.property,state:0
msgid "State"
msgstr ""
msgstr "Status"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation methods"
msgstr ""
msgstr "Abschreibungsmethode"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Other information"
msgstr ""
msgstr "Andere Informationen"
#. module: account_asset
#: field:account.asset.board,value_asset_cumul:0
msgid "Cumul. value"
msgstr ""
msgstr "kummulierter Betrag"
#. module: account_asset
#: view:account.asset.property:0
msgid "Assets methods"
msgstr ""
msgstr "Anlagen Methoden"
#. module: account_asset
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
msgstr "Fehlerhafter XML-Code für diese Ansicht!"
#. module: account_asset
#: model:ir.model,name:account_asset.model_account_asset_property
msgid "Asset property"
msgstr ""
msgstr "Anlagenmerkmale"
#. module: account_asset
#: wizard_view:account.asset.compute,asset_compute:0
@ -212,30 +212,30 @@ msgstr ""
#: model:ir.actions.wizard,name:account_asset.wizard_asset_compute
#: model:ir.ui.menu,name:account_asset.menu_wizard_asset_compute
msgid "Compute assets"
msgstr ""
msgstr "Berechne Anlagen"
#. module: account_asset
#: wizard_view:account.asset.modify,init:0
#: wizard_button:account.asset.modify,init,asset_modify:0
#: model:ir.actions.wizard,name:account_asset.wizard_asset_modify
msgid "Modify asset"
msgstr ""
msgstr "Verändere Anlagegut"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Confirm asset"
msgstr ""
msgstr "Anlagegut bestätigen"
#. module: account_asset
#: view:account.asset.property.history:0
#: model:ir.model,name:account_asset.model_account_asset_property_history
msgid "Asset history"
msgstr ""
msgstr "Anlagenhistorie"
#. module: account_asset
#: field:account.asset.property,date:0
msgid "Date created"
msgstr ""
msgstr "Erstellungsdatum"
#. module: account_asset
#: model:ir.module.module,description:account_asset.module_meta_information
@ -252,211 +252,213 @@ msgstr ""
#: field:account.asset.board,value_gross:0
#: field:account.asset.property,value_total:0
msgid "Gross value"
msgstr ""
msgstr "Anschaffungswert"
#. module: account_asset
#: selection:account.asset.property,method_time:0
msgid "Ending period"
msgstr ""
msgstr "Periodenende"
#. module: account_asset
#: field:account.asset.board,name:0
msgid "Asset name"
msgstr ""
msgstr "Anlagenname"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Accounts information"
msgstr ""
msgstr "Konto Information"
#. module: account_asset
#: field:account.asset.asset,note:0
#: field:account.asset.category,note:0
#: field:account.asset.property.history,note:0
msgid "Note"
msgstr ""
msgstr "Notiz"
#. module: account_asset
#: selection:account.asset.asset,state:0
#: selection:account.asset.property,state:0
msgid "Draft"
msgstr ""
msgstr "Entwurf"
#. module: account_asset
#: field:account.asset.property,type:0
msgid "Depr. method type"
msgstr ""
msgstr "Abschreibungsmethode"
#. module: account_asset
#: field:account.asset.property,account_asset_id:0
msgid "Asset account"
msgstr ""
msgstr "Anlagenkonto"
#. module: account_asset
#: field:account.asset.property.history,asset_property_id:0
msgid "Method"
msgstr ""
msgstr "Methode"
#. module: account_asset
#: selection:account.asset.asset,state:0
msgid "Normal"
msgstr ""
msgstr "Normal"
#. module: account_asset
#: field:account.asset.property,method_progress_factor:0
msgid "Progressif factor"
msgstr ""
msgstr "Progressionsfaktor"
#. module: account_asset
#: field:account.asset.asset,localisation:0
msgid "Localisation"
msgstr ""
msgstr "Lokalisation"
#. module: account_asset
#: field:account.asset.property,method:0
msgid "Computation method"
msgstr ""
msgstr "Berechnungsmethode"
#. module: account_asset
#: field:account.asset.property,method_time:0
msgid "Time method"
msgstr ""
msgstr "Zeitmethode"
#. module: account_asset
#: field:account.asset.asset,active:0
msgid "Active"
msgstr ""
msgstr "Aktiv"
#. module: account_asset
#: field:account.asset.property.history,user_id:0
msgid "User"
msgstr ""
msgstr "Benutzer"
#. module: account_asset
#: field:account.asset.asset,property_ids:0
msgid "Asset method name"
msgstr ""
msgstr "Anlagenmethoden Bezeichnung"
#. module: account_asset
#: field:account.asset.asset,date:0
#: field:account.asset.property.history,date:0
msgid "Date"
msgstr ""
msgstr "Datum"
#. module: account_asset
#: field:account.asset.board,value_net:0
msgid "Net value"
msgstr ""
msgstr "Netto Wert"
#. module: account_asset
#: wizard_view:account.asset.close,init:0
#: model:ir.actions.wizard,name:account_asset.wizard_asset_close
msgid "Close asset"
msgstr ""
msgstr "Anlagegut schliessen"
#. module: account_asset
#: field:account.asset.property,history_ids:0
msgid "History"
msgstr ""
msgstr "Verlauf"
#. module: account_asset
#: field:account.asset.property,account_actif_id:0
msgid "Depreciation account"
msgstr ""
msgstr "AfA-Konto"
#. module: account_asset
#: field:account.asset.asset,period_id:0
#: wizard_field:account.asset.compute,init,period_id:0
msgid "Period"
msgstr ""
msgstr "Periode"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_category_form
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_category_form
msgid "Asset Category"
msgstr ""
msgstr "Anlagenkategorie"
#. module: account_asset
#: wizard_button:account.asset.close,init,end:0
#: wizard_button:account.asset.compute,init,end:0
#: wizard_button:account.asset.modify,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Abbrechen"
#. module: account_asset
#: selection:account.asset.asset,state:0
#: wizard_button:account.asset.compute,asset_compute,end:0
#: selection:account.asset.property,state:0
msgid "Close"
msgstr ""
msgstr "Schließen"
#. module: account_asset
#: selection:account.asset.property,state:0
msgid "Open"
msgstr ""
msgstr "Öffnen"
#. module: account_asset
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Der Objektname muss mit \"x_\" beginnen und darf keine Sonderzeichen "
"beinhalten!"
#. module: account_asset
#: model:ir.module.module,shortdesc:account_asset.module_meta_information
msgid "Asset management"
msgstr ""
msgstr "Anlagenbuchhaltung"
#. module: account_asset
#: view:account.asset.board:0
#: field:account.asset.property,board_ids:0
#: model:ir.model,name:account_asset.model_account_asset_board
msgid "Asset board"
msgstr ""
msgstr "Anlagenspiegel"
#. module: account_asset
#: field:account.asset.asset,state:0
msgid "Global state"
msgstr ""
msgstr "Globaler Status"
#. module: account_asset
#: selection:account.asset.property,method_time:0
msgid "Delay"
msgstr ""
msgstr "Verzögerung"
#. module: account_asset
#: wizard_view:account.asset.close,init:0
msgid "General information"
msgstr ""
msgstr "Allgemeine Informationen"
#. module: account_asset
#: field:account.asset.property,journal_analytic_id:0
msgid "Analytic journal"
msgstr ""
msgstr "analytisches Journal"
#. module: account_asset
#: field:account.asset.property,name:0
msgid "Method name"
msgstr ""
msgstr "Methodenname"
#. module: account_asset
#: field:account.asset.property,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Journal"
#. module: account_asset
#: field:account.asset.property.history,name:0
msgid "History name"
msgstr ""
msgstr "Verlauf Bezeichnung"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Close method"
msgstr ""
msgstr "Abschlussmethode"
#. module: account_asset
#: field:account.asset.property,entry_asset_ids:0
msgid "Asset Entries"
msgstr ""
msgstr "Anlagen"
#. module: account_asset
#: field:account.asset.asset,category_id:0
@ -464,66 +466,66 @@ msgstr ""
#: field:account.asset.category,name:0
#: model:ir.model,name:account_asset.model_account_asset_category
msgid "Asset category"
msgstr ""
msgstr "Analgenkategorie"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation"
msgstr ""
msgstr "Abschreibung"
#. module: account_asset
#: field:account.asset.asset,code:0
#: field:account.asset.category,code:0
msgid "Asset code"
msgstr ""
msgstr "Kurzbezeichnung"
#. module: account_asset
#: field:account.asset.asset,value_total:0
msgid "Total value"
msgstr ""
msgstr "Gesamt Wert"
#. module: account_asset
#: selection:account.asset.asset,state:0
msgid "View"
msgstr ""
msgstr "Ansicht"
#. module: account_asset
#: view:account.asset.asset:0
msgid "General info"
msgstr ""
msgstr "Allgemeine Informationen"
#. module: account_asset
#: field:account.asset.asset,sequence:0
msgid "Sequence"
msgstr ""
msgstr "Sequenz"
#. module: account_asset
#: field:account.asset.property,value_residual:0
msgid "Residual value"
msgstr ""
msgstr "Buchwert"
#. module: account_asset
#: wizard_button:account.asset.close,init,asset_close:0
msgid "End of asset"
msgstr ""
msgstr "Ende des Anlagegutes"
#. module: account_asset
#: selection:account.asset.property,type:0
msgid "Direct"
msgstr ""
msgstr "Direkt"
#. module: account_asset
#: selection:account.asset.property,type:0
msgid "Indirect"
msgstr ""
msgstr "Indirekt"
#. module: account_asset
#: field:account.asset.asset,parent_id:0
msgid "Parent asset"
msgstr ""
msgstr "übergeordnetes Anlagegut"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_tree
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_tree
msgid "Asset Hierarchy"
msgstr ""
msgstr "Anlangenhierarchie"

View File

@ -146,7 +146,11 @@
<field eval="&quot;&quot;&quot;Grand-Rosière&quot;&quot;&quot;" name="city"/>
<field eval="&quot;&quot;&quot;+32.81.73.35.01&quot;&quot;&quot;" name="fax"/>
<field eval="&quot;&quot;&quot;1367&quot;&quot;&quot;" name="zip"/>
<field name="country_id" ref="base.be"/>
<!-- The partner associated with the main company should not have a country specified in the demo data,
as it may conflicts with the accounting installing chart wizard. This wizard will indeed try to
install the localization module accordingly to this variable automatically. Thus, in demo data,
everyone would have the belgian chart of account by default, what should be avoided. -->
<!-- <field name="country_id" ref="base.be"/> -->
<field eval="&quot;&quot;&quot;+32.81.81.37.00&quot;&quot;&quot;" name="phone"/>
<field eval="&quot;&quot;&quot;Chaussée de Namur, 40&quot;&quot;&quot;" name="street"/>
</record>
@ -154,7 +158,11 @@
<field eval="&quot;&quot;&quot;Louvain-La-Neuve&quot;&quot;&quot;" name="city"/>
<field eval="&quot;&quot;&quot;1348&quot;&quot;&quot;" name="zip"/>
<field eval="&quot;&quot;&quot;contact&quot;&quot;&quot;" name="type"/>
<field name="country_id" ref="base.be"/>
<!-- The partner associated with the main company should not have a country specified in the demo data,
as it may conflicts with the accounting installing chart wizard. This wizard will indeed try to
install the localization module accordingly to this variable automatically. Thus, in demo data,
everyone would have the belgian chart of account by default, what should be avoided. -->
<!-- <field name="country_id" ref="base.be"/> -->
<field eval="&quot;&quot;&quot;rue du pré, 115&quot;&quot;&quot;" name="street"/>
<field eval="1" name="active"/>
</record>
@ -162,7 +170,11 @@
<field eval="&quot;&quot;&quot;Charleroi&quot;&quot;&quot;" name="city"/>
<field eval="&quot;&quot;&quot;6000&quot;&quot;&quot;" name="zip"/>
<field eval="&quot;&quot;&quot;contact&quot;&quot;&quot;" name="type"/>
<field name="country_id" ref="base.be"/>
<!-- The partner associated with the main company should not have a country specified in the demo data,
as it may conflicts with the accounting installing chart wizard. This wizard will indeed try to
install the localization module accordingly to this variable automatically. Thus, in demo data,
everyone would have the belgian chart of account by default, what should be avoided. -->
<!-- <field name="country_id" ref="base.be"/> -->
<field eval="&quot;&quot;&quot;Boulevars Tirou, 32&quot;&quot;&quot;" name="street"/>
<field eval="1" name="active"/>
</record>

View File

@ -64,7 +64,7 @@
country_id: base.be
first_name: Nicolas
job_ids:
- address_id: base.main_address
- address_id: base.res_partner_address_1
function: CTO
state: current
- address_id: base.res_partner_address_3000

View File

@ -59,13 +59,21 @@ class report_xml(osv.osv):
return True
def report_get(self, cr, uid, report_id, context=None):
if context is None:
context = {}
# skip osv.fields.sanitize_binary_value() because we want the raw bytes in all cases
context.update(bin_raw=True)
report = self.browse(cr, uid, report_id, context=context)
sxw_data=(report.report_sxw_content).encode("iso-8859-1", "replace")
rml_data= (report.report_rml_content).encode("iso-8859-1", "replace")
sxw_data = report.report_sxw_content
rml_data = report.report_rml_content
if isinstance(sxw_data, unicode):
sxw_data = sxw_data.encode("iso-8859-1", "replace")
if isinstance(rml_data, unicode):
rml_data = rml_data.encode("iso-8859-1", "replace")
return {
'file_type' : report.report_type,
'report_sxw_content': report.report_sxw_content and base64.encodestring(sxw_data) or False,
'report_rml_content': report.report_rml_content and base64.encodestring(rml_data) or False
'file_type' : report.report_type,
'report_sxw_content': sxw_data and base64.encodestring(sxw_data) or False,
'report_rml_content': rml_data and base64.encodestring(rml_data) or False
}
report_xml()

View File

@ -23,7 +23,7 @@
<field name="code" eval="'# obj is a browse_record and will provide stupid ids to method\n' 'action = pool.get(\'ir.actions.todo\').action_launch(cr, uid, ' + str([ref('base_setup_installer_todo')]) + ', context=context)'"/>
</record>
<menuitem name="Add More Features" action="action_start_configurator" id="menu_view_base_module_configuration" parent="base.menu_config" type="server" icon="STOCK_EXECUTE" sequence="100"/>
<menuitem name="Add More Features" action="action_start_configurator" id="menu_view_base_module_configuration" parent="base.menu_config" type="server" icon="STOCK_EXECUTE" sequence="1"/>
<record id="ir_ui_view_sc_configuration" model="ir.ui.view_sc">
<field name="name">Add More Features</field>
<field name="resource">ir.ui.menu</field>

View File

@ -19,6 +19,7 @@
#
##############################################################################
import res_company
import base_vat
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -33,6 +33,21 @@ be validated for all supported countries. The country is inferred from the
2-letter country code that prefixes the VAT number, e.g. ``BE0477472701``
will be validated using the Belgian rules.
There are two different levels of VAT number validation:
* By default, a simple off-line check is performed using the known validation
rules for the country, usually a simple check digit. This is quick and
always available, but allows numbers that are perhaps not truly allocated,
or not valid anymore.
* When the "VAT VIES Check" option is enabled (in the configuration of the user's
Company), VAT numbers will be instead submitted to the online EU VIES
database, which will truly verify that the number is valid and currently
allocated to a EU company. This is a little bit slower than the simple
off-line check, requires an Internet connection, and may not be available
all the time. If the service is not available or does not support the
requested country (e.g. for non-EU countries), a simple check will be performed
instead.
Supported countries currently include EU countries, and a few non-EU countries
such as Chile, Colombia, Mexico, Norway or Russia. For unsupported countries,
only the country code will be validated.

View File

@ -61,27 +61,48 @@ class res_partner(osv.osv):
vat_country, vat_number = vat[:2].lower(), vat[2:].replace(' ', '')
return vat_country, vat_number
def check_vat(self, cr, uid, ids, context=None):
def simple_vat_check(self, cr, uid, country_code, vat_number, context=None):
'''
Check the VAT number depending of the country.
http://sima-pc.com/nif.php
'''
country_obj = self.pool.get('res.country')
check_func_name = 'check_vat_' + country_code
check_func = getattr(self, check_func_name, None) or \
getattr(vatnumber, check_func_name, None)
if not check_func:
# No VAT validation available, default to check that the country code exists
res_country = self.pool.get('res.country')
return bool(res_country.search(cr, uid, [('code', '=ilike', country_code)], context=context))
return check_func(vat_number)
def vies_vat_check(self, cr, uid, country_code, vat_number, context=None):
try:
# Validate against VAT Information Exchange System (VIES)
# see also http://ec.europa.eu/taxation_customs/vies/
return vatnumber.check_vies(country_code.upper()+vat_number)
except Exception:
# see http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
# Fault code may contain INVALID_INPUT, SERVICE_UNAVAILABLE, MS_UNAVAILABLE,
# TIMEOUT or SERVER_BUSY. There is no way we can validate the input
# with VIES if any of these arise, including the first one (it means invalid
# country code or empty VAT number), so we fall back to the simple check.
return self.simple_vat_check(cr, uid, country_code, vat_number, context=context)
def check_vat(self, cr, uid, ids, context=None):
user_company = self.pool.get('res.users').browse(cr, uid, uid).company_id
if user_company.vat_check_vies:
# force full VIES online check
check_func = self.vies_vat_check
else:
# quick and partial off-line checksum validation
check_func = self.simple_vat_check
for partner in self.browse(cr, uid, ids, context=context):
if not partner.vat:
continue
vat_country, vat_number = self._split_vat(partner.vat)
check_func_name = 'check_vat_' + vat_country
check_func = getattr(self, check_func_name, None) or \
getattr(vatnumber, check_func_name, None)
if not check_func:
# No VAT validation available, default to check that the country code
# exists.
if country_obj.search(cr, uid, [('code', 'ilike', vat_country)], context=context):
continue
# Country code not found, considered invalid
if not check_func(cr, uid, vat_country, vat_number, context=context):
return False
return check_func(vat_number)
return True
def vat_change(self, cr, uid, ids, value, context=None):

View File

@ -7,12 +7,23 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="account.view_partner_property_form"/>
<field name="arch" type="xml">
<field name="property_account_payable" position="after">
<group colspan="2" col="6">
<field name="vat" on_change="vat_change(vat)" colspan="4" />
<field name="vat_subjected" colspan="1" groups="base.group_extended" />
</group>
<field name="property_account_payable" position="after">
<group colspan="2" col="6">
<field name="vat" on_change="vat_change(vat)" colspan="4" />
<field name="vat_subjected" colspan="1" groups="base.group_extended" />
</group>
</field>
</field>
</record>
<record id="company_form_vat" model="ir.ui.view">
<field name="name">res.company.form.vat.inherit</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<field name="currency_id" position="after">
<field name="vat_check_vies" groups="base.group_extended" />
</field>
</field>
</record>

View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Business Applications
# Copyright (c) 2011 OpenERP S.A. <http://openerp.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv, fields
class res_company_vat (osv.osv):
_inherit = 'res.company'
_columns = {
'vat_check_vies': fields.boolean('VIES VAT Check',
help="If checked, Partners VAT numbers will be fully validated against EU's VIES service "
"rather than via a simple format validation (checksum)."),
}

View File

@ -206,6 +206,7 @@ class crm_lead(crm_case, osv.osv):
'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
'color': fields.integer('Color Index'),
'partner_address_name': fields.related('partner_address_id', 'name', type='char', string='Partner Contact Name', readonly=True),
'partner_address_email': fields.related('partner_address_id', 'email', type='char', string='Partner Contact Email', readonly=True),
'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True),
'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True),
@ -784,17 +785,17 @@ class crm_lead(crm_case, osv.osv):
This opens Meeting's calendar view to schedule meeting on current Opportunity
@return : Dictionary value for created Meeting view
"""
if context is None:
context = {}
value = {}
data_obj = self.pool.get('ir.model.data')
for opp in self.browse(cr, uid, ids, context=context):
data_obj = self.pool.get('ir.model.data')
# Get meeting views
tree_view = data_obj.get_object_reference(cr, uid, 'crm', 'crm_case_tree_view_meet')
form_view = data_obj.get_object_reference(cr, uid, 'crm', 'crm_case_form_view_meet')
calander_view = data_obj.get_object_reference(cr, uid, 'crm', 'crm_case_calendar_view_meet')
search_view = data_obj.get_object_reference(cr, uid, 'crm', 'view_crm_case_meetings_filter')
context = {
context.update({
'default_opportunity_id': opp.id,
'default_partner_id': opp.partner_id and opp.partner_id.id or False,
'default_user_id': uid,
@ -802,7 +803,7 @@ class crm_lead(crm_case, osv.osv):
'default_email_from': opp.email_from,
'default_state': 'open',
'default_name': opp.name
}
})
value = {
'name': _('Meetings'),
'context': context,

View File

@ -305,31 +305,46 @@
<field name="priority"/>
<field name="planned_revenue" sum="Expected Revenues"/>
<field name="user_email"/>
<field name="user_id"/>
<field name="partner_address_email"/>
<templates>
<t t-name="lead_details">
<ul class="oe_kanban_tooltip">
<li t-if="record.phone.raw_value"><b>Phone:</b> <field name="phone"/></li>
<li><b>Probability:</b> <field name="probability"/>%%</li>
<li><b>Creation date:</b> <field name="create_date"/></li>
<li t-if="record.date_deadline.raw_value"><b>Date Deadline:</b> <field name="date_deadline"/></li>
</ul>
</t>
<t t-name="kanban-box">
<t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
<div t-att-class="color + (record.priority.raw_value == 1 ? ' oe_kanban_color_alert' : '')">
<t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())" t-set="border">oe_kanban_color_red</t>
<div t-attf-class="#{kanban_color(record.color.raw_value)} #{border || ''}">
<div class="oe_kanban_box oe_kanban_color_border">
<table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
<tr>
<td class="oe_kanban_title3" align="left" valign="middle">
<td align="left" valign="middle" width="16">
<a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/>
<a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/>
</td>
<td align="left" valign="middle" class="oe_kanban_title3" tooltip="lead_details">
<field name="partner_id"/>
<t t-if="record.planned_revenue.raw_value">
- <t t-esc="Math.round(record.planned_revenue.value)"/>
<field name="company_currency"/>
</t>
</td>
<td class="oe_kanban_title2" align="right" valign="middle" t-if="record.planned_revenue.raw_value" nowrap="nowrap">
<t t-esc="Math.round(record.planned_revenue.value)"/> <field name="company_currency"/>
</td>
<td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar"/></td>
<td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/></td>
</tr>
</table>
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger">
<div class="oe_kanban_right oe_kanban_small">
<field name="user_login"/>
</div>
<div>
<b><field name="partner_address_name"/></b>
<b>
<a t-if="record.partner_address_email.raw_value" t-attf-href="mailto:#{record.partner_address_email.raw_value}">
<field name="partner_address_name"/>
</a>
<field t-if="!record.partner_address_email.raw_value" name="partner_address_name"/>
</b>
</div>
<div>
<field name="name"/>
@ -345,13 +360,14 @@
<a string="Change Color" icon="color-picker" type="color" name="color"/>
<a string="Send New Email" name="%(mail.action_email_compose_message_wizard)d" icon="terp-mail-message-new" type="action"/>
<a string="Schedule/Log Call" name="%(opportunity2phonecall_act)d" icon="terp-call-start" type="action"/>
<a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/>
<a string="Schedule Meeting" name="action_makeMeeting" type="object" icon="stock_calendar"/>
<a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/>
</div>
<div class="oe_kanban_right">
<a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause" />
<a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="kanban-apply" />
<a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="kanban-stop" />
<a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause" />
<a name="case_open" string="Open" states="pending" type="object" icon="gtk-media-play" />
<a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="kanban-apply" />
</div>
<br class="oe_kanban_clear"/>
</div>

View File

@ -147,6 +147,7 @@ class crm_lead_report(osv.osv):
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
FROM
crm_lead c
WHERE c.active = 'true'
)""")
crm_lead_report()

View File

@ -97,6 +97,7 @@ class crm_fundraising_report(osv.osv):
avg(extract('epoch' from (c.date_closed-c.create_date)))/(3600*24) as delay_close
from
crm_fundraising c
where c.active = 'true'
group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),\
c.state, c.user_id,c.section_id,c.categ_id,type_id,c.partner_id,c.company_id,
c.create_date,to_char(c.date, 'YYYY-MM-DD')

View File

@ -101,6 +101,7 @@ class crm_helpdesk_report(osv.osv):
abs(avg(extract('epoch' from (c.date_deadline - c.date_closed)))/(3600*24)) as delay_expected
from
crm_helpdesk c
where c.active = 'true'
group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),to_char(c.date, 'YYYY-MM-DD'),\
c.state, c.user_id,c.section_id,c.priority,\
c.partner_id,c.company_id,c.date_deadline,c.create_date,c.date,c.date_closed,\

View File

@ -100,6 +100,7 @@ class report_event_registration(osv.osv):
event_registration c ON (e.id=c.event_id)
LEFT JOIN
event_type t ON (e.type=t.id)
WHERE c.active = 'true'
GROUP BY
to_char(e.date_begin, 'YYYY'),
to_char(e.date_begin, 'MM'),

View File

@ -59,7 +59,7 @@
<form string="Leave Request">
<group col="8" colspan="4">
<field name="name" attrs="{'readonly':[('state','!=','draft'),('state','!=','confirm')]}"/>
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" width="130" groups="base.group_hr_manager"/>
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" width="130" string="Mode" groups="base.group_hr_manager"/>
<group attrs="{'invisible':[('holiday_type','=','employee')]}">
<field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'readonly':[('state','!=','draft')]}"/>
</group>
@ -104,7 +104,7 @@
<form string="Allocation Request">
<group col="8" colspan="4">
<field name="name"/>
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" string="Allocation Category" groups="base.group_hr_manager"/>
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" string="Allocation Mode" groups="base.group_hr_manager"/>
<group attrs="{'invisible':[('holiday_type','=','category')]}">
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')]}"/>
</group>

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,13 @@
!python {model: ir.actions.todo}: |
if self.browse(cr, uid, ref('l10n_be.config_call_account_template')).state=='open':
wiz = self.pool.get('wizard.multi.charts.accounts')
wiz_id = wiz.create(cr, uid, {
values = {
'chart_template_id': ref('l10n_be.l10nbe_chart_template')
})
}
values.update(
wiz.onchange_chart_template_id(cr, uid, False, ref('l10n_be.l10nbe_chart_template')).get('values', {})
)
wiz_id = wiz.create(cr, uid, values)
wiz.execute(cr, uid, [wiz_id])
self.write(cr, uid, [ref('l10n_be.config_call_account_template')], {
'state': 'done'

View File

@ -124,15 +124,6 @@ class account_tax(osv.osv):
account_tax()
class account_journal(osv.osv):
_inherit = "account.journal"
_columns = {
'internal_sequence': fields.many2one('ir.sequence', 'Internal Sequence'),
}
account_journal()
class wizard_multi_charts_accounts(osv.osv_memory):
_inherit = 'wizard.multi.charts.accounts'

View File

@ -96,18 +96,6 @@
</field>
</record>
<record id="view_l10n_br_journal_form_inherit" model="ir.ui.view">
<field name="name">l10n_br.journal.form.inherit</field>
<field name="model">account.journal</field>
<field name="type">form</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<field name="sequence_id" position="after">
<field name="internal_sequence"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -138,7 +138,7 @@
</group>
<separator colspan="4" string="Financial institute infos"/>
<newline/>
<field name="my_bank" attrs="{'invisible': [('company_id', '!=', True)]}" colspan="4"/>
<field name="my_bank" attrs="{'invisible': [('company_id', '=', False)]}" colspan="4"/>
<group string="BVR print options" colspan="4" attrs="{'invisible': [('my_bank', '!=', True)]}" >
<field name="bvr_adherent_num"/>
<field name="print_bank"/>

View File

@ -359,11 +359,12 @@
</record>
<record id="ch_1024" model="account.account.template">
<field name="type">other</field>
<field name="name">Compte en devise A</field>
<field name="name">Compte en devise EUR</field>
<field name="code">1024</field>
<field name="user_type" ref="account_type_cash"/>
<field name="note"/>
<field ref="ch_102_0" name="parent_id"/>
<field name="currency_id" ref="base.EUR"/>
</record>
<record id="ch_1025" model="account.account.template">
<field name="type">other</field>

View File

@ -109,7 +109,7 @@ class report_membership(osv.osv):
LEFT JOIN membership_membership_line ml ON (ml.partner = p.id)
LEFT JOIN account_invoice_line il ON (ml.account_invoice_line = il.id)
LEFT JOIN account_invoice ai ON (il.invoice_id = ai.id)
WHERE p.membership_state != 'none'
WHERE p.membership_state != 'none' and p.active = 'true'
GROUP BY
p.id,
p.user_id,

View File

@ -6,8 +6,8 @@
<field name="type">kanban</field>
<field name="inherit_id" ref="project.view_task_kanban"/>
<field name="arch" type="xml">
<xpath expr="//span[@class='oe_kanban_project_times']/t" position="before">
<a name="pad_get" string="Pad" type="object" class="oe_kanban_button"><b>PAD</b></a>
<xpath expr="//span[@class='oe_kanban_project_times']" position="before">
<a name="pad_get" string="Pad" type="object" class="oe_kanban_button" style="margin-left: 5px;"><b>PAD</b></a>
</xpath>
</field>
</record>

View File

@ -8,78 +8,80 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-07-04 14:16+0000\n"
"PO-Revision-Date: 2011-07-11 09:51+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2011-11-29 07:47+0000\n"
"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-11-05 05:57+0000\n"
"X-Generator: Launchpad (build 14231)\n"
"X-Launchpad-Export-Date: 2011-11-30 05:27+0000\n"
"X-Generator: Launchpad (build 14404)\n"
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:55
#, python-format
msgid "Please select at least one user to share with"
msgstr ""
msgstr "Bitte wählen Sie mindestens einen Benutzer zum Teilen"
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:59
#, python-format
msgid "Please select at least one group to share with"
msgstr ""
msgstr "Bitte wählen Sie mindestens eine Gruppe zum Teilen"
#. module: portal
#: field:res.portal,group_id:0
msgid "Group"
msgstr ""
msgstr "Gruppe"
#. module: portal
#: help:res.portal,other_group_ids:0
msgid "Those groups are assigned to the portal's users"
msgstr ""
msgstr "Diese Gruppen sind den Portalbenutzern zugeordnet"
#. module: portal
#: view:share.wizard:0
#: field:share.wizard,group_ids:0
msgid "Existing groups"
msgstr ""
msgstr "Vorhandene Gruppen"
#. module: portal
#: model:ir.model,name:portal.model_res_portal_wizard_user
msgid "Portal User Config"
msgstr ""
msgstr "Portalbenutzer Konfiguration"
#. module: portal
#: view:res.portal.wizard.user:0
msgid "Portal User"
msgstr ""
msgstr "Portalbenutzer"
#. module: portal
#: help:res.portal,override_menu:0
msgid "Enable this option to override the Menu Action of portal users"
msgstr ""
msgstr "Aktivieren, um die Menü Aktion für Portalbenutzer zu überschreiben"
#. module: portal
#: field:res.portal.wizard.user,user_email:0
msgid "E-mail"
msgstr ""
msgstr "E-Mail"
#. module: portal
#: view:res.portal:0
msgid "Other Groups assigned to Users"
msgstr ""
msgstr "Andere dem Benutzer zugeteilte Gruppen"
#. module: portal
#: constraint:res.users:0
msgid "The chosen company is not in the allowed companies for this user"
msgstr ""
"Die gewählte Firma ist nicht in der Liste der erlaubten Firmen für diesen "
"Benutzer"
#. module: portal
#: view:res.portal:0
#: field:res.portal,widget_ids:0
msgid "Widgets"
msgstr ""
msgstr "Oberflächenelemente"
#. module: portal
#: model:ir.module.module,description:portal.module_meta_information
@ -103,67 +105,68 @@ msgstr ""
#. module: portal
#: view:share.wizard:0
msgid "Who do you want to share with?"
msgstr ""
msgstr "Mit wem wollen Sie teilen?"
#. module: portal
#: view:res.portal.wizard:0
msgid "Send Invitations"
msgstr ""
msgstr "Versende Einladungen"
#. module: portal
#: help:res.portal,url:0
msgid "The url where portal users can connect to the server"
msgstr ""
msgstr "Die URL, mit der sich Portalbenutzer anmelden können"
#. module: portal
#: field:res.portal.widget,widget_id:0
msgid "Widget"
msgstr ""
msgstr "Oberflächenelement"
#. module: portal
#: help:res.portal.wizard,message:0
msgid "This text is included in the welcome email sent to the users"
msgstr ""
msgstr "Dieser Text ist Bestandteil der Willkommen E-Mail an den Benutzer"
#. module: portal
#: help:res.portal,menu_action_id:0
msgid "If set, replaces the standard menu for the portal's users"
msgstr ""
"Wenn definiert, dann ersetzt dies das Standardmenü für Portalbenutzer"
#. module: portal
#: field:res.portal,parent_menu_id:0
msgid "Parent Menu"
msgstr ""
msgstr "Obermenü"
#. module: portal
#: view:res.portal:0
msgid "Portal Name"
msgstr ""
msgstr "Portalname"
#. module: portal
#: view:res.portal.wizard.user:0
msgid "Portal Users"
msgstr ""
msgstr "Portalbenutzer"
#. module: portal
#: field:res.portal,override_menu:0
msgid "Override Menu Action of Users"
msgstr ""
msgstr "Überschreibe Die Menü-Aktion für Benutzer"
#. module: portal
#: field:res.portal,menu_action_id:0
msgid "Menu Action"
msgstr ""
msgstr "Menü Aktion"
#. module: portal
#: field:res.portal.wizard.user,name:0
msgid "User Name"
msgstr ""
msgstr "Benutzer Name"
#. module: portal
#: model:ir.model,name:portal.model_res_portal_widget
msgid "Portal Widgets"
msgstr ""
msgstr "Portal Oberflächenelemente"
#. module: portal
#: model:ir.model,name:portal.model_res_portal
@ -172,47 +175,47 @@ msgstr ""
#: field:res.portal.widget,portal_id:0
#: field:res.portal.wizard,portal_id:0
msgid "Portal"
msgstr ""
msgstr "Portal"
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:35
#, python-format
msgid "Your OpenERP account at %(company)s"
msgstr ""
msgstr "Ihr OpenERP Konto bei %(company)s"
#. module: portal
#: code:addons/portal/portal.py:110
#: code:addons/portal/portal.py:184
#, python-format
msgid "%s Menu"
msgstr ""
msgstr "%s Menü"
#. module: portal
#: help:res.portal.wizard,portal_id:0
msgid "The portal in which new users must be added"
msgstr ""
msgstr "Das Portal, zu dem neue Benutzer hinzugefügt werden müssen"
#. module: portal
#: help:res.portal,widget_ids:0
msgid "Widgets assigned to portal users"
msgstr ""
msgstr "Oberflächenelemente, die Portalbenutzern zugeordnet sind"
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:163
#, python-format
msgid "(missing url)"
msgstr ""
msgstr "(fehlende URL)"
#. module: portal
#: view:share.wizard:0
#: field:share.wizard,user_ids:0
msgid "Existing users"
msgstr ""
msgstr "Bestehende Benutzer"
#. module: portal
#: field:res.portal.wizard.user,wizard_id:0
msgid "Wizard"
msgstr ""
msgstr "Assistent"
#. module: portal
#: help:res.portal.wizard.user,user_email:0
@ -220,63 +223,65 @@ msgid ""
"Will be used as user login. Also necessary to send the account information "
"to new users"
msgstr ""
"Wird als Benutzer Login verwendet. Ebenso notwendig die Kontoinformation an "
"neue Benutzer zu senden."
#. module: portal
#: field:res.portal.wizard.user,lang:0
msgid "Language"
msgstr ""
msgstr "Sprache"
#. module: portal
#: field:res.portal,url:0
msgid "URL"
msgstr ""
msgstr "URL"
#. module: portal
#: view:res.portal:0
msgid "Widgets assigned to Users"
msgstr ""
msgstr "Oberflächenelemente, die Benutzern zugeordnet sind"
#. module: portal
#: help:res.portal.wizard.user,lang:0
msgid "The language for the user's user interface"
msgstr ""
msgstr "Die Sprache für die Benutzerschnittstelle"
#. module: portal
#: view:res.portal.wizard:0
msgid "Cancel"
msgstr ""
msgstr "Abbrechen"
#. module: portal
#: view:res.portal:0
msgid "Website"
msgstr ""
msgstr "Webseite"
#. module: portal
#: view:res.portal:0
msgid "Create Parent Menu"
msgstr ""
msgstr "Erstelle Obermenü"
#. module: portal
#: view:res.portal.wizard:0
msgid ""
"The following text will be included in the welcome email sent to users."
msgstr ""
msgstr "Der folgende Text wird im Willkommen E-Mail verwendet werden"
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:135
#, python-format
msgid "Email required"
msgstr ""
msgstr "E-Mail ist erforderlich"
#. module: portal
#: model:ir.model,name:portal.model_res_users
msgid "res.users"
msgstr ""
msgstr "res.users"
#. module: portal
#: constraint:res.portal.wizard.user:0
msgid "Invalid email address"
msgstr ""
msgstr "Ungültige E-Mail Adresse"
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:136
@ -284,28 +289,30 @@ msgstr ""
msgid ""
"You must have an email address in your User Preferences to send emails."
msgstr ""
"Sie müssen Ihre E-Mail Adresse in den Benuztereinstellungen erfassen um E-"
"Mails senden zu können."
#. module: portal
#: model:ir.model,name:portal.model_ir_ui_menu
msgid "ir.ui.menu"
msgstr ""
msgstr "ir.ui.menu"
#. module: portal
#: help:res.portal,group_id:0
msgid "The group extended by this portal"
msgstr ""
msgstr "Die diesem Portal zugeordnete Gruppe"
#. module: portal
#: view:res.portal:0
#: view:res.portal.wizard:0
#: field:res.portal.wizard,user_ids:0
msgid "Users"
msgstr ""
msgstr "Benutzer"
#. module: portal
#: field:res.portal,other_group_ids:0
msgid "Other User Groups"
msgstr ""
msgstr "Andere Benutzergruppen"
#. module: portal
#: model:ir.actions.act_window,name:portal.portal_list_action
@ -313,38 +320,38 @@ msgstr ""
#: model:ir.ui.menu,name:portal.portal_menu
#: view:res.portal:0
msgid "Portals"
msgstr ""
msgstr "Portale"
#. module: portal
#: help:res.portal,parent_menu_id:0
msgid "The menu action opens the submenus of this menu item"
msgstr ""
msgstr "Die Menü-Aktion öffnet Unter-Menüeinträge dieses Menüeintrags"
#. module: portal
#: field:res.portal.widget,sequence:0
msgid "Sequence"
msgstr ""
msgstr "Sequenz"
#. module: portal
#: field:res.users,partner_id:0
msgid "Related Partner"
msgstr ""
msgstr "referenzierter Geschäftspartner"
#. module: portal
#: view:res.portal:0
msgid "Portal Menu"
msgstr ""
msgstr "Portal Menü"
#. module: portal
#: sql_constraint:res.users:0
msgid "You can not have two users with the same login !"
msgstr ""
msgstr "2 Benuzter können nicht den gleichen Login Code haben."
#. module: portal
#: view:res.portal.wizard:0
#: field:res.portal.wizard,message:0
msgid "Invitation message"
msgstr ""
msgstr "Einladungstext"
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:36
@ -369,24 +376,24 @@ msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_res_portal_wizard
msgid "Portal Wizard"
msgstr ""
msgstr "Portal Assistent"
#. module: portal
#: help:res.portal.wizard.user,name:0
msgid "The user's real name"
msgstr ""
msgstr "Der vollständige Name des Benutzers"
#. module: portal
#: model:ir.actions.act_window,name:portal.address_wizard_action
#: model:ir.actions.act_window,name:portal.partner_wizard_action
#: view:res.portal.wizard:0
msgid "Add Portal Access"
msgstr ""
msgstr "Füge Portalberechtigung hinzu"
#. module: portal
#: field:res.portal.wizard.user,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Partner"
#. module: portal
#: model:ir.actions.act_window,help:portal.portal_list_action
@ -398,8 +405,14 @@ msgid ""
"the portal's users.\n"
" "
msgstr ""
"\n"
"Ein Portal erlaubt die Zuordnung von bestimmten Sichten und Regeln zu einer "
"Benutzergruppe (die Portalgruppe).\n"
"Ein Portalmenu, Oberflächenelemente und einzelne Gruppen können "
"Portalbenutzern zugeordnet werden.\n"
" "
#. module: portal
#: model:ir.model,name:portal.model_share_wizard
msgid "Share Wizard"
msgstr ""
msgstr "Freigabeassistent"

View File

@ -57,7 +57,7 @@
<field name="sequence"/>
<field colspan="4" name="name" select="1"/>
<field name="product_id"/>
<field name="product_tmpl_id" select="1"/>
<field name="product_tmpl_id" select="1" groups="product.group_product_variant"/>
<field name="categ_id" select="1"/>
<field name="min_quantity"/>
<field name="base"/>
@ -74,7 +74,7 @@
<separator colspan="4" string="Rules Test Match"/>
<field colspan="4" name="name" select="1"/>
<field name="product_id" on_change="product_id_change(product_id)" select="1"/>
<field name="product_tmpl_id" select="1"/>
<field name="product_tmpl_id" select="1" groups="product.group_product_variant"/>
<field name="categ_id" select="1"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
<newline/>

View File

@ -34,6 +34,7 @@
<separator colspan="2" string="Performance"/>
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time" />
<field name="resource_calendar_id"/>
</group>
<group col="2" colspan="2" name="misc">
<separator colspan="4" string="Miscelleanous"/>
@ -263,7 +264,7 @@
<button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-media-play"/>
<button name="%(action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" icon="gtk-convert" context="{'button_reactivate':True}" />
<button name="do_pending" states="open" string="Pending" type="object" icon="gtk-media-pause"/>
<button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending"/>
<button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="terp-personal"/>
<button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>
</group>
</page>
@ -329,9 +330,14 @@
<field name="sequence"/>
<field name="state"/>
<field name="kanban_state"/>
<field name="project_id"/>
<field name="remaining_hours" sum="Remaining Time"/>
<field name="date_deadline"/>
<templates>
<t t-name="task_details">
<ul class="oe_kanban_tooltip" t-if="record.project_id.raw_value">
<li><b>Project:</b> <field name="project_id"/></li>
</ul>
</t>
<t t-name="kanban-box">
<t t-set="pad_url">http://pad.openerp.com/<t t-raw="_.str.underscored(_.str.trim(record.name.raw_value))"/></t>
<t t-if="record.kanban_state.raw_value === 'blocked'" t-set="border">oe_kanban_color_red</t>
@ -344,8 +350,8 @@
<a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/>
<a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/>
</td>
<td align="left" valign="middle">
<b t-att-title="record.project_id.value"><field name="name"/></b>
<td align="left" valign="middle" class="oe_kanban_title3" tooltip="task_details">
<b><field name="name"/></b>
</td>
<td valign="top" width="22">
<img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/>
@ -355,8 +361,11 @@
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger">
<div class="oe_kanban_description">
<t t-esc="kanban_text_ellipsis(record.description.value, 160)"/>
<span class="oe_kanban_project_times" style="white-space: nowrap">
<i t-if="record.date_deadline.raw_value"><field name="date_deadline"/> ,</i>
<i t-if="record.date_deadline.raw_value">
<t t-if="record.description.raw_value">, </t>
<field name="date_deadline"/>
</i>
<span class="oe_kanban_project_times" style="white-space: nowrap; padding-left: 5px;">
<t t-set="hours" t-value="record.remaining_hours.raw_value"/>
<t t-set="times" t-value="[
[1, (hours gte 1 and hours lt 2)]
@ -377,9 +386,11 @@
<div class="oe_kanban_left">
<a string="Edit" icon="gtk-edit" type="edit"/>
<a string="Change Color" icon="color-picker" type="color" name="color"/>
<a name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="terp-personal"/>
<a name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close"/>
</div>
<div class="oe_kanban_right">
<a name="set_kanban_state_blocked" string="Block" kanban_states="normal,done" type="object" icon="kanban-stop"/>
<a name="set_kanban_state_blocked" string="Mark as Blocked" kanban_states="normal,done" type="object" icon="kanban-stop"/>
<a name="set_kanban_state_normal" string="Normal" kanban_states="blocked,done" type="object" icon="gtk-media-play"/>
<a name="set_kanban_state_done" string="Done" kanban_states="blocked,normal" type="object" icon="kanban-apply"/>
</div>
@ -423,7 +434,7 @@
<field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
<field name="state" invisible="context.get('set_visible',False)"/>
<button name="do_open" states="pending,draft,done,cancelled" string="Start Task" type="object" icon="gtk-media-play" help="For changing to open state" invisible="context.get('set_visible',False)"/>
<button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>
<button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="terp-personal" help="For changing to delegate state"/>
<button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/>
</tree>
</field>
@ -518,7 +529,7 @@
<field name="view_mode">tree,form,calendar,gantt,graph,kanban</field>
<field eval="False" name="filter"/>
<field name="view_id" ref="view_task_tree2"/>
<field name="context">{"search_default_draft": 1, "search_default_open":1}</field>
<field name="context">{"search_default_draft": 1, "search_default_open":1, "search_default_project_id": project_id}</field>
<field name="search_view_id" ref="view_task_search_form"/>
<field name="help">A task represents a work that has to be done. Each user works in his own list of tasks where he can record his task work in hours. He can work and close the task itself or delegate it to another user. If you delegate a task to another user, you get a new task in pending state, which will be reopened when you have to review the work achieved. If you install the project_timesheet module, task work can be invoiced based on the project configuration. With the project_mrp module, sales orders can create tasks automatically when they are confirmed.</field>
</record>

View File

@ -91,7 +91,7 @@ class report_project_task_user(osv.osv):
(extract('epoch' from (t.date_start-t.create_date)))/(3600*24) as opening_days,
abs((extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24)) as delay_endings_days
FROM project_task t
WHERE t.active = 'true'
GROUP BY
t.id,
remaining_hours,

View File

@ -487,7 +487,6 @@ project_issue()
class project(osv.osv):
_inherit = "project.project"
_columns = {
'resource_calendar_id' : fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'project_escalation_id' : fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'reply_to' : fields.char('Reply-To Email Address', size=256)
}

View File

@ -16,6 +16,7 @@
<field eval="15.0" name="duration"/>
<field eval="&quot;Bug in Accounts module&quot;" name="name"/>
<field eval="&quot;agr@agrolait.com&quot;" name="email_from"/>
<field name="type_id" ref="project.project_tt_specification"/>
</record>
<record id="crm_case_programnotgivingproperoutput0" model="project.issue">
@ -31,6 +32,7 @@
<field name="categ_id" ref="bug_categ"/>
<field eval="&quot;Program not giving proper output&quot;" name="name"/>
<field name="project_id" ref="project.project_project_22"/>
<field name="type_id" ref="project.project_tt_specification"/>
</record>
<record id="crm_case_outputincorrect0" model="project.issue">
@ -45,6 +47,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_23"/>
<field eval="&quot;Output incorrect&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_development"/>
</record>
<record id="crm_case_problemloadingpage0" model="project.issue">
@ -60,6 +63,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Problem loading page&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_pagenotfound0" model="project.issue">
@ -74,6 +78,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Page not Found&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_development"/>
</record>
<record id="crm_case_programmingerror0" model="project.issue">
@ -89,6 +94,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Programming Error&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_logicalerrorinprogram0" model="project.issue">
@ -104,6 +110,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_9"/>
<field eval="&quot;Logical Error in Program&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_constrainterror0" model="project.issue">
@ -119,6 +126,7 @@
<field name="categ_id" ref="bug_categ"/>
<field name="project_id" ref="project.project_project_9"/>
<field eval="&quot;Constraint Error&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_errorinprogram0" model="project.issue">
@ -133,6 +141,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Error in Program&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_patcheserrorinprogram0" model="project.issue">
@ -148,6 +157,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_9"/>
<field eval="&quot;Patches Error in Program&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_testing"/>
</record>
<record id="crm_case_newfeaturestobeadded0" model="project.issue">
@ -163,6 +173,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_21"/>
<field eval="&quot;New Features To Be Added&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_merge"/>
</record>
<record id="crm_case_addmenustothemodule0" model="project.issue">
@ -179,6 +190,7 @@
<field name="project_id" ref="project.project_project_21"/>
<field eval="&quot;Add menus to the module&quot;" name="name"/>
<field eval="&quot;info@opensides.be&quot;" name="email_from"/>
<field name="type_id" ref="project.project_tt_development"/>
</record>
<record id="crm_case_includeattendancesheetinproject0" model="project.issue">
@ -195,6 +207,7 @@
<field name="project_id" ref="project.project_project_9"/>
<field eval="&quot;Include Attendance sheet in Project&quot;" name="name"/>
<field eval="&quot;contact@tecsas.fr&quot;" name="email_from"/>
<field name="type_id" ref="project.project_tt_development"/>
</record>
<record id="crm_case_createnewobject0" model="project.issue">
@ -210,6 +223,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Create new object&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_specification"/>
</record>
<record id="crm_case_improvereportsinhrms0" model="project.issue">
@ -225,6 +239,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Improve Reports in HRMS&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_development"/>
</record>
<record id="crm_case_improvereportsinpms0" model="project.issue">
@ -240,6 +255,7 @@
<field name="categ_id" ref="feature_request_categ"/>
<field name="project_id" ref="project.project_project_22"/>
<field eval="&quot;Improve Reports in PMS&quot;" name="name"/>
<field name="type_id" ref="project.project_tt_specification"/>
</record>
</data>

View File

@ -398,19 +398,6 @@
# Project
# ------------------------------------------------------
<record id="project.view_project_resource_form1" model="ir.ui.view">
<field name="name">Project Resource Calendar View</field>
<field name="model">project.project</field>
<field name="type">form</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="priority" position="after">
<field name="resource_calendar_id"/>
</field>
</field>
</record>
<record id="view_project_form_inherited" model="ir.ui.view">
<field name="name">project.project.form.inherited</field>
<field name="model">project.project</field>

View File

@ -104,7 +104,7 @@ class project_issue_report(osv.osv):
FROM
project_issue c
WHERE c.categ_id IN (select id from crm_case_categ where object_id in (select id from ir_model where model = 'project.issue'))
WHERE c.active= 'true' and c.categ_id IN (select id from crm_case_categ where object_id in (select id from ir_model where model = 'project.issue'))
)""")
project_issue_report()

View File

@ -9,3 +9,4 @@
"access_resource_calendar_project_manager","resource.calendar.project.manager","resource.model_resource_calendar","project.group_project_manager",1,1,1,1
"access_project_issue_report_user","project.issue.report user","model_project_issue_report","project.group_project_user",1,0,0,0
"access_mail_message_issue_project_user","mail.message.user","mail.model_mail_message","project.group_project_user",1,1,1,0
"access_crm_case_section","crm.case.section","crm.model_crm_case_section","project.group_project_user",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
9 access_resource_calendar_project_manager resource.calendar.project.manager resource.model_resource_calendar project.group_project_manager 1 1 1 1
10 access_project_issue_report_user project.issue.report user model_project_issue_report project.group_project_user 1 0 0 0
11 access_mail_message_issue_project_user mail.message.user mail.model_mail_message project.group_project_user 1 1 1 0
12 access_crm_case_section crm.case.section crm.model_crm_case_section project.group_project_user 1 0 0 0

View File

@ -26,7 +26,7 @@
"website": "http://www.openerp.com",
"category": "Project Management",
"images": ["images/project_phase_form.jpeg","images/project_phases.jpeg", "images/resources_allocation.jpeg"],
"depends": ["resource", "project"],
"depends": ["project"],
"description": """
Long Term Project management module that tracks planning, scheduling, resources allocation.
===========================================================================================

View File

@ -273,23 +273,6 @@
</record>
# ------------------------------------------------------
# Project
# ------------------------------------------------------
<record id="project.view_project_user_form1" model="ir.ui.view">
<field name="name">Project Resource Calendar View</field>
<field name="model">project.project</field>
<field name="type">form</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="effective_hours" position="after">
<field name="resource_calendar_id"/>
</field>
</field>
</record>
# ------------------------------------------------------
# Project Task
# ------------------------------------------------------

View File

@ -65,7 +65,11 @@ More information on the methodology:
"board_project_scrum_view.xml",
],
'demo_xml': ['project_scrum_demo.xml'],
'test': ['test/project_scrum_report.yml'],
'test': ['test/backlog_process.yml',
'test/sprint_process.yml',
'test/cancel_backlog.yml',
'test/project_scrum_demo.yml',
],
'installable': True,
'active': False,
'certificate' : '00736750152003010781',

View File

@ -262,7 +262,7 @@ class project_scrum_task(osv.osv):
'project.scrum.product.backlog': (_get_task, ['sprint_id'], 10)
}),
}
#dead code
def onchange_backlog_id(self, cr, uid, backlog_id=False):
if not backlog_id:
return {}
@ -292,7 +292,7 @@ class project_scrum_meeting(osv.osv):
_defaults = {
'date' : lambda *a: time.strftime('%Y-%m-%d'),
}
# dead code
def button_send_to_master(self, cr, uid, ids, context=None):
meeting_id = self.browse(cr, uid, ids, context=context)[0]
if meeting_id and meeting_id.sprint_id.scrum_master_id.user_email:
@ -303,6 +303,7 @@ class project_scrum_meeting(osv.osv):
raise osv.except_osv(_('Error !'), _('Please provide email address for scrum master defined on sprint.'))
return True
#dead code
def button_send_product_owner(self, cr, uid, ids, context=None):
if context is None:
context = {}
@ -316,6 +317,7 @@ class project_scrum_meeting(osv.osv):
raise osv.except_osv(_('Error !'), _('Please provide email address for product owner defined on sprint.'))
return True
#dead code
def email_send(self, cr, uid, ids, email, context=None):
mail_message_obj = self.pool.get('mail.message')
meeting_id = self.browse(cr, uid, ids, context=context)[0]

View File

@ -10,7 +10,6 @@
<field name="project_id" ref="project.project_project_9"/>
<field name="product_owner_id" ref="base.user_root"/>
<field model="res.users" name="scrum_master_id" search="[('login','=','admin')]"/>
<field name="state">open</field>
</record>
<record id="scrum_sprint_1" model="project.scrum.sprint">
@ -158,7 +157,6 @@
<field name="expected_hours">6.0</field>
<field name="note">This new system will enable you to migrate automatically from an old version of OpenERP to a new one. This system will migrate not only the OpenERP system but also the customers particularities. This happens without any kind of script or programming. It has been possible to carry out such a system thanks to the descriptive approach of OpenERP components. </field>
<field name="sprint_id" ref="scrum_sprint_0"/>
<field name="state">done</field>
<field name="project_id" ref="project.project_project_9"/>
</record>
<record id="scrum_product_backlog_1" model="project.scrum.product.backlog">
@ -387,6 +385,9 @@
<field name="state">open</field>
<field name="product_backlog_id" ref="scrum_product_backlog_7"/>
</record>
<!-- Resource: project_scrum.meeting -->
<record id="scrum_meeting_0" model="project.scrum.meeting">
<field name="question_yesterday">
Admin: Worked on the Automatic migration system

View File

@ -263,6 +263,8 @@
<group colspan="4" col="6">
<field name="date"/>
<field name="user_id"/>
<button name="%(mail.action_email_compose_message_wizard)d"
string="Send Email" type="action" icon="terp-mail-message-new"/>
</group>
<notebook colspan="4">
<page string="Scrum Meeting">
@ -273,8 +275,6 @@
<separator colspan="4" string="Are there anything blocking you?"/>
<field colspan="4" name="question_blocks" nolabel="1"/>
<separator colspan="4" string=""/>
<button name="button_send_to_master" type="object" string="Send to Scrum Master" icon="gtk-ok"/>
<button name="button_send_product_owner" type="object" string="Send to Product Owner" icon="gtk-ok"/>
</page>
<page string="Optional Info">
<separator colspan="4" string="Are your Sprint Backlog estimate accurate ?"/>

View File

@ -0,0 +1,39 @@
-
In Order to Test process of Project Agile Methology,
-
I put Backlog in pending state because of specification is not ready.
-
!python {model: project.scrum.product.backlog}: |
self.button_pending(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after put in pending.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: Backlog should be in pending state}:
- state == "pending"
-
Now Specification is ready so I Open backlog "Automatic migration system".
-
!python {model: project.scrum.product.backlog}: |
self.button_open(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after opened.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: Backlog should be in open state}:
- state == "open"
-
I close Backlog after review.
-
!python {model: project.scrum.product.backlog}: |
self.button_close(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after closed.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: Backlog should be in close state}:
- state == "done"
-
I merge two Backlogs in to one Backlog.
-
!python {model: project.scrum.backlog.merge}: |
self.check_backlogs(cr, uid, [ref("scrum_product_backlog_1"),ref("scrum_product_backlog_2")], {"active_ids": [ref("scrum_product_backlog_1"),ref("scrum_product_backlog_2")],
"active_id": ref("scrum_product_backlog_1")
})

View File

@ -0,0 +1,50 @@
-
I cancel Backlog "Automatic migration system" from draft state.
-
!python {model: project.scrum.product.backlog}: |
self.button_cancel(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after canceled.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: backlog should be in cancel state}:
- state == "cancel"
-
I cancel opened Backlog "Editable Trees".
-
!python {model: project.scrum.product.backlog}: |
self.button_cancel(cr, uid, [ref("scrum_product_backlog_7")])
-
I check state of Backlog after canceled.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_7, severity: error, string: backlog should be in cancel state}:
- state == "cancel"
-
I put Backlog in pending due to resource unavailability.
-
!python {model: project.scrum.product.backlog}: |
self.button_pending(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after put in pending.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: Backlog should be in pending state}:
- state == "pending"
-
I cancel pending Backlog "Automatic migration system".
-
!python {model: project.scrum.product.backlog}: |
self.button_cancel(cr, uid, [ref("scrum_product_backlog_0")])
-
I check state of Backlog after canceled.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_0, severity: error, string: backlog should be in cancel state}:
- state == "cancel"
-
I Postpone opened Backlog "Reshape the complete menu".
-
!python {model: project.scrum.product.backlog}: |
self.button_postpone(cr, uid, [ref("scrum_product_backlog_6")])
-
I check state of Backlog after Postpone.
-
!assert {model: project.scrum.product.backlog, id: scrum_product_backlog_6, severity: error, string: backlog should be in cancel state}:
- state == "cancel"

View File

@ -0,0 +1,3 @@
-
!record {model: project.scrum.sprint, id: scrum_sprint_0, view: False}:
project_id: project.project_integrate_openerp

View File

@ -1,9 +0,0 @@
-
In order to test the PDF reports defined on a Project Scrum, we will print Project Scrum Sprint Burndown Report
-
!python {model: project.scrum.sprint}: |
import netsvc, tools, os
data_dict = {'model': 'project.scrum.sprint', 'id':ref('project_scrum.scrum_sprint_0')}
(data, format) = netsvc.LocalService('report.scrum.sprint.burndown').create(cr, uid, [ref('project_scrum.scrum_sprint_0')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'project_scrum-project_scrum_sprint_burndown.'+format), 'wb+').write(data)

View File

@ -0,0 +1,78 @@
-
I put sprint in pending state to allocate task to resources.
-
!python {model: project.scrum.sprint}: |
self.button_pending(cr, uid, [ref("scrum_sprint_0")])
-
I check state of sprint after put in pending.
-
!assert {model: project.scrum.sprint, id: scrum_sprint_0, severity: error, string: Sprint should be in pending state}:
- state == "pending"
-
I assign Backlog into this Sprint
-
!python {model: project.scrum.backlog.assign.sprint}: |
new_id = self.create(cr, uid, {'sprint_id': ref("scrum_sprint_0")})
self.assign_sprint(cr, uid, [new_id], {"active_ids": [ref("scrum_product_backlog_0")]
})
backlog_obj = self.pool.get('project.scrum.product.backlog')
task_obj = self.pool.get('project.task')
backlog_data = backlog_obj.browse(cr, uid, ref("scrum_product_backlog_0"), context)
assert backlog_data.sprint_id.id == ref("scrum_sprint_0"), 'Sprint is not assigned'
-
I Open sprint of "Week 31"
-
!python {model: project.scrum.sprint}: |
self.button_open(cr, uid, [ref("scrum_sprint_0")])
-
I check state of sprint after opened.
-
!assert {model: project.scrum.sprint, id: scrum_sprint_0, severity: error, string: Sprint should be in Open state}:
- state == "open"
-
I create tasks from backlog "Automatic migration system" for sprint
-
!python {model: project.scrum.backlog.create.task}: |
new_id = self.create(cr, uid, {'user_id': ref("project.res_users_project_manager")})
task_obj = self.pool.get('project.task')
backlog_obj = self.pool.get('project.scrum.product.backlog')
new_task = self.do_create(cr, uid, [new_id], {"active_ids": [ref("scrum_product_backlog_0")]})
backlog_data = backlog_obj.browse(cr, uid, ref("scrum_product_backlog_0"), context)
task_ids = task_obj.search(cr, uid, [('product_backlog_id','=', backlog_data.id)])
assert len(task_ids), "Task not created"
task = task_obj.browse(cr, uid, task_ids[0], context)
assert task.name == backlog_data.name and task.total_hours == backlog_data.expected_hours and task.user_id and task.user_id.id == ref("project.res_users_project_manager"), 'Task not has been created'
-
I send email to scrum master with scrum meeting details.
-
!python {model: mail.compose.message }: |
ctx = context.copy()
ctx.update({'active_model': 'project.scrum.meeting', 'active_id': ref("scrum_meeting_0"), 'active_ids': [ref("scrum_meeting_0")]})
vals = self.default_get(cr, uid , [], context=ctx)
try:
new_id = self.create(cr, uid, {'email_to': 'xyz@mycompany.com', 'subject': 'test'})
self.send_mail(cr, uid, [new_id], context=ctx)
except Exception, e:
pass
-
I close sprint after review
-
!python {model: project.scrum.sprint}: |
self.button_close(cr, uid, [ref("scrum_sprint_0")])
-
I check state after closed sprint.
-
!assert {model: project.scrum.sprint, id: scrum_sprint_0, severity: error, string: Sprint shoud be in close state}:
- state == "done"
-
I print Burndown chart of Sprint.
-
!python {model: project.scrum.sprint}: |
import netsvc, tools, os
data_dict = {'model': 'project.scrum.sprint', 'id':ref('scrum_sprint_0')}
(data, format) = netsvc.LocalService('report.scrum.sprint.burndown').create(cr, uid, [ref('scrum_sprint_0')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'project_scrum-project_scrum_sprint_burndown.'+format), 'wb+').write(data)

View File

@ -136,7 +136,6 @@
<action name="%(purchase.action_po_per_month_tree)d" string="Purchase order per month"/>
-->
<action name="%(purchase_draft)d" string="Request for Quotations"/>
<action name="%(purchase_waiting)d" string="Purchase Order Waiting Approval"/>
</column>
<column>
<action name="%(action_purchase_order_monthly_categ_graph)d" string="Monthly Purchase by Category"/>

View File

@ -172,7 +172,7 @@
</group>
<notebook colspan="4">
<page string="Purchase Order">
<field name="partner_id" on_change="onchange_partner_id(partner_id)" context="{'search_default_supplier':1}" />
<field name="partner_id" on_change="onchange_partner_id(partner_id)" context="{'search_default_supplier':1,'default_supplier':1,'default_customer':0}" />
<field name="partner_address_id"/>
<field domain="[('type','=','purchase')]" name="pricelist_id" groups="base.group_extended"/>
<field name="origin" groups="base.group_extended"/>

View File

@ -35,16 +35,12 @@ class stock_move(osv.osv):
on the purchase order in case the valuation data was not directly specified during picking
confirmation.
"""
product_uom_obj = self.pool.get('product.uom')
reference_amount, reference_currency_id = super(stock_move, self)._get_reference_accounting_values_for_valuation(cr, uid, move, context=context)
default_uom = move.product_id.uom_id.id
qty = product_uom_obj._compute_qty(cr, uid, move.product_uom.id, move.product_qty, default_uom)
if move.product_id.cost_method != 'average' or not move.price_unit:
# no average price costing or cost not specified during picking validation, we will
# plug the purchase line values if they are found.
if move.purchase_line_id and move.picking_id.purchase_id.pricelist_id:
reference_amount, reference_currency_id = move.purchase_line_id.price_unit * qty, move.picking_id.purchase_id.pricelist_id.currency_id.id
reference_amount, reference_currency_id = move.purchase_line_id.price_unit * move.product_qty, move.picking_id.purchase_id.pricelist_id.currency_id.id
return reference_amount, reference_currency_id
stock_move()

View File

@ -37,9 +37,10 @@ that exceeds minimum amount set by configuration wizard.
'website': 'http://www.openerp.com',
'init_xml': [],
'update_xml': [
'purchase_double_validation_workflow.xml',
'purchase_double_validation_installer.xml'
],
'purchase_double_validation_workflow.xml',
'purchase_double_validation_installer.xml',
'board_purchase_view.xml'
],
'test': ['test/purchase_double_validation_test.yml'],
'demo_xml': [],
'installable': True,

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="purchase_waiting" model="ir.actions.act_window">
<field name="name">Purchase Order Waiting Approval</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('date_order','&gt;',time.strftime('%Y-01-01 00:00:00')),('date_order','&lt;',time.strftime('%Y-12-31 23:59:59')), ('state','in',('wait','confirmed'))]</field>
</record>
<record id="board_purchase_form2" model="ir.ui.view">
<field name="name">board.purchase.form</field>
<field name="model">board.board</field>
<field name="type">form</field>
<field name="inherit_id" ref="purchase.board_purchase_form"/>
<field name="arch" type="xml">
<xpath expr="/form/board/column/action[@string='Request for Quotations']" position="after">
<action name="%(purchase_waiting)d" string="Purchase Order Waiting Approval"/>
</xpath>
</field>
</record>
</data>
</openerp>

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:16+0000\n"
"PO-Revision-Date: 2011-11-07 12:47+0000\n"
"Last-Translator: Ferdinand-camptocamp <Unknown>\n"
"PO-Revision-Date: 2011-11-29 07:02+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: 2011-11-12 04:50+0000\n"
"X-Generator: Launchpad (build 14277)\n"
"X-Launchpad-Export-Date: 2011-11-30 05:27+0000\n"
"X-Generator: Launchpad (build 14404)\n"
#. module: stock
#: field:product.product,track_outgoing:0
@ -2256,7 +2256,7 @@ msgstr "Zukünftige Menge"
#. module: stock
#: field:product.category,property_stock_valuation_account_id:0
msgid "Stock Valuation Account"
msgstr ""
msgstr "Lagerbestandskonto"
#. module: stock
#: field:stock.move,note:0
@ -4220,7 +4220,7 @@ msgstr "Optionale Lagerort Details, nur als Information"
#. module: stock
#: view:product.product:0
msgid "Expected Stock Variations"
msgstr ""
msgstr "Erwartete Lagerveränderungen"
#~ msgid "LIFO"
#~ msgstr "LiFo"

View File

@ -159,6 +159,7 @@ class report_stock_lines_date(osv.osv):
left outer join stock_inventory_line l on (p.id=l.product_id)
left join stock_inventory s on (l.inventory_id=s.id)
and s.state = 'done'
where p.active='true'
group by p.id
)""")
report_stock_lines_date()

View File

@ -128,15 +128,12 @@ class report_stock_move(osv.osv):
LEFT JOIN product_uom pu ON (sm.product_uom=pu.id)
LEFT JOIN product_uom pu2 ON (sm.product_uom=pu2.id)
LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
LEFT JOIN stock_location sl ON (sm.location_id = sl.id)
GROUP BY
sm.id,sp.type, sm.date,sm.address_id,
sm.product_id,sm.state,sm.product_uom,sm.date_expected,
sm.product_id,pt.standard_price, sm.picking_id, sm.product_qty,
sm.company_id,sm.product_qty, sm.location_id,sm.location_dest_id,pu.factor,pt.categ_id, sp.stock_journal_id)
AS al
GROUP BY
al.out_qty,al.in_qty,al.curr_year,al.curr_month,
al.curr_day,al.curr_day_diff,al.curr_day_diff1,al.curr_day_diff2,al.dp,al.location_id,al.location_dest_id,

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:16+0000\n"
"PO-Revision-Date: 2011-01-12 15:14+0000\n"
"Last-Translator: Ferdinand-camptocamp <Unknown>\n"
"PO-Revision-Date: 2011-11-29 07:08+0000\n"
"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-11-05 05:48+0000\n"
"X-Generator: Launchpad (build 14231)\n"
"X-Launchpad-Export-Date: 2011-11-30 05:27+0000\n"
"X-Generator: Launchpad (build 14404)\n"
#. module: stock_planning
#: code:addons/stock_planning/wizard/stock_planning_createlines.py:73
@ -352,7 +352,7 @@ msgstr " Bedarfsmenge "
#: code:addons/stock_planning/stock_planning.py:719
#, python-format
msgid "%s Pick List %s (%s, %s) %s %s \n"
msgstr ""
msgstr "%s Lieferscheinliste %s (%s, %s) %s %s \n"
#. module: stock_planning
#: view:stock.planning.createlines:0
@ -473,7 +473,7 @@ msgstr "Fehler !"
#: code:addons/stock_planning/stock_planning.py:626
#, python-format
msgid "Manual planning for %s"
msgstr ""
msgstr "Manuelle Planung für %s"
#. module: stock_planning
#: field:stock.sale.forecast,analyzed_user_id:0
@ -1248,7 +1248,7 @@ msgstr "Erzeuge Prognosepositionen für d. ausgew. Zentrallager u. d. Periode"
#: code:addons/stock_planning/stock_planning.py:656
#, python-format
msgid "%s Requisition (%s, %s) %s %s \n"
msgstr ""
msgstr "%s Anforderung (%s, %s) %s %s \n"
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:655
@ -1757,6 +1757,22 @@ msgid ""
" Expected Out: %s Incoming Left: %s \n"
" Stock Simulation: %s Minimum stock: %s "
msgstr ""
"Lieferschein erstellt im MPS von Benutzer: %s Erstellungsdatum: %s "
" \n"
"Für Periode: %s entspricht Status: \n"
" Lagervorschau: %s \n"
" Anfangsbestand: %s \n"
" Geplant Auslieferung: %s Geplanter Eingang: %s "
" \n"
" bereits ausgeliefert: %s Bereits eingegangen: %s "
" \n"
" bestätigte Auslieferung: %s Bestätigter Eingang: %s "
" \n"
" geplante Auslieferung vor: %s Geplanter Eingang vor: %s "
" \n"
" erwartete Auslieferung: %s restlicher Eingang: %s "
" \n"
" Lager Simulation: %s Minimumbestand: %s "
#. module: stock_planning
#: field:stock.planning,procure_to_stock:0