bzr revid: uco@tinyerp.co.in-20100208052430-5zelz4rvs60yxr54
This commit is contained in:
uco (OpenERP) 2010-02-08 10:54:30 +05:30
commit b082152d90
158 changed files with 2194 additions and 2208 deletions

View File

@ -23,7 +23,7 @@
{
"name" : "Accounting and Financial Management",
"version" : "1.1",
"depends" : ["product", "base", "process"],
"depends" : ["product", "analytic", "process"],
"author" : "Tiny",
"description": """Financial and accounting module that covers:
General accounting

View File

@ -1748,15 +1748,6 @@ class account_config_wizard(osv.osv_memory):
_name = 'account.config.wizard'
_inherit = 'res.config'
def _get_charts(self, cr, uid, context):
module_obj=self.pool.get('ir.module.module')
ids=module_obj.search(cr, uid, [('category_id', '=', 'Account Charts'),
('state', '<>', 'installed')])
res=[(m.id, m.shortdesc) for m in module_obj.browse(cr, uid, ids)]
res.append((-1, 'None'))
res.sort(key=lambda x: x[1])
return res
_columns = {
'name':fields.char(
'Name', required=True, size=64,
@ -1768,7 +1759,6 @@ class account_config_wizard(osv.osv_memory):
'date2': fields.date('End Date', required=True),
'period':fields.selection([('month','Month'), ('3months','3 Months')],
'Periods', required=True),
'charts' : fields.selection(_get_charts, 'Charts of Account',required=True)
}
_defaults = {
'code': lambda *a: time.strftime('%Y'),
@ -1777,14 +1767,6 @@ class account_config_wizard(osv.osv_memory):
'date2': lambda *a: time.strftime('%Y-12-31'),
'period':lambda *a:'month',
}
def install_account_chart(self, cr, uid, ids, context=None):
for res in self.read(cr,uid,ids):
chart_id = res['charts']
if chart_id > 0:
mod_obj = self.pool.get('ir.module.module')
mod_obj.button_install(cr, uid, [chart_id], context=context)
cr.commit()
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
def execute(self, cr, uid, ids, context=None):
for res in self.read(cr,uid,ids):
@ -1804,7 +1786,6 @@ class account_config_wizard(osv.osv_memory):
res_obj.create_period(cr,uid,[new_id])
elif res['period']=='3months':
res_obj.create_period3(cr,uid,[new_id])
self.install_account_chart(cr,uid,ids)
account_config_wizard()

View File

@ -4,43 +4,31 @@
<field name="name">account.installer.view</field>
<field name="model">account.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Accounting Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Accounting Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Configure Your Accounting System" colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Accounting" colspan="4"/>
<field name="account_analytic_default"/>
<field name="account_analytic_plans"/>
<!-- insert suppliers payment management here -->
<field name="account_followup"/>
<field name="account_asset"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string"
>Configure Your Accounting System</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">You can enhance OpenERP's basic accounting support with a few additional OpenERP applications</attribute>
</xpath>
<group colspan="8">
<separator string="Accounting" colspan="4"/>
<field name="charts"/>
<field name="account_analytic_default"/>
<field name="account_analytic_plans"/>
<field name="account_payment"/>
<field name="account_followup"/>
<field name="account_asset"/>
</group>
</data>
</field>
</record>
@ -57,7 +45,7 @@
<record id="account_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_account_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -355,8 +355,8 @@
<field name="search_view_id" ref="view_account_invoice_filter"/>
</record>
<record id="action_invoice_tree_panding_invoice" model="ir.actions.act_window">
<field name="name">Panding Invoice</field>
<record id="action_invoice_tree_pending_invoice" model="ir.actions.act_window">
<field name="name">Pending Invoice</field>
<field name="res_model">account.invoice</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>

View File

@ -1451,9 +1451,9 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Account Configure
</attribute></form>
<form position="attributes">
<attribute name="string">Account Configure</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator col="4" colspan="4" string="Create a Fiscal Year"/>
<field name="name"/>
@ -1461,8 +1461,6 @@
<field name="date1"/>
<field name="date2"/>
<field name="period" colspan="4"/>
<separator col="4" colspan="4" string="Select Chart of Accounts"/>
<field name="charts"/>
</group>
<xpath expr='//button[@name="action_skip"]' position="replace"/>
</data>
@ -1734,16 +1732,14 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Generate Chart of Accounts from a Chart Template
</attribute></form>
<form position="attributes">
<attribute name="string">Generate Chart of Accounts from a Chart Template</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator col="4" colspan="4" string="
Generate Chart of Accounts from a Chart Template"/>
<label align="0.0" colspan="4" string="
This will automatically configure your chart of accounts,
bank accounts, taxes and journals according to the selected
template"/>
<label align="0.0" colspan="4"
string="This will automatically configure your chart of accounts, bank accounts, taxes and journals according to the selected template"/>
<field name="company_id" widget="selection"
groups="base.group_multi_company"/>
<field name ="code_digits" />

View File

@ -33,52 +33,3 @@ out after this mail was sent, please consider the present one as \
void. Do not hesitate to contact our accounting department'
}
res_company()
class company_setup(osv.osv_memory):
"""
Insert Information for a company.
Wizard asks for:
* A Company with its partner
* Insert a suitable message for Overdue Payment Report.
"""
_name='wizard.company.setup'
_inherit = 'res.config'
_columns = {
'company_id':fields.many2one('res.company','Company',required=True),
'overdue_msg': fields.text('Overdue Payment Message'),
}
def get_message(self,cr,uid,context={}):
company =self.pool.get('res.users').browse(cr,uid,[uid],context)[0].company_id
msg = company.overdue_msg
phone = company.partner_id.address and (company.partner_id.address[0].phone and ' at ' + str(company.partner_id.address[0].phone) + '.' or '.') or '.'
msg += str(phone)
return msg
_defaults = {
'company_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr,uid,[uid],c)[0].company_id.id,
'overdue_msg': get_message,
}
def onchange_company_id(self, cr, uid, ids, company, context=None):
if not company:
return {}
comp_obj = self.pool.get('res.company').browse(cr,uid,company)
partner_address = comp_obj.partner_id.address
if partner_address and partner_address[0].phone:
msg_tail = ' at %s.'%(partner_address[0].phone)
else:
msg_tail = '.'
return {'value': {'overdue_msg': comp_obj.overdue_msg + msg_tail } }
def execute(self, cr, uid, ids, context=None):
content_wiz = self.pool.get('wizard.company.setup')\
.read(cr,uid,ids,['company_id','overdue_msg'])
if content_wiz:
wiz_data = content_wiz[0]
self.pool.get('res.company').write(
cr, uid,
[wiz_data['company_id']],
{'overdue_msg':wiz_data['overdue_msg']})
company_setup()

View File

@ -15,45 +15,5 @@
</notebook>
</field>
</record>
<!-- Wizard for Configuration of Overdue Payments -->
<record model="ir.ui.view" id="wizard_company_setup_form">
<field name="name">wizard.company.setup.form</field>
<field name="model">wizard.company.setup</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Overdue Payment Report Message
</attribute></form>
<group string="res_config_contents" position="replace">
<field name="company_id" select="1"
on_change="onchange_company_id(company_id)"
groups="base.group_multi_company"/>
<separator string="Message" colspan="4"/>
<field name="overdue_msg" nolabel="1" colspan="4"/>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
</data>
</field>
</record>
<record id="action_wizard_company_setup_form" model="ir.actions.act_window">
<field name="name">Overdue Payment Report Message</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">wizard.company.setup</field>
<field name="view_id" ref="wizard_company_setup_form"/>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- register configuration wizard -->
<record id="config_wizard_account_base_setup_form" model="ir.actions.todo">
<field name="action_id" ref="action_wizard_company_setup_form"/>
</record>
</data>
</openerp>

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-01-15 22:28+0000\n"
"Last-Translator: Alex Mr.Brightside Demurine <extrimall90@mail.ru>\n"
"PO-Revision-Date: 2010-02-06 19:29+0000\n"
"Last-Translator: Santjaga <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: 2010-01-16 04:35+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:37+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@ -97,7 +97,7 @@ msgstr "Несогласованные проводки"
#: field:account.tax,base_code_id:0
#: field:account.tax.template,base_code_id:0
msgid "Base Code"
msgstr ""
msgstr "Базовый Код"
#. module: account
#: view:account.account:0
@ -157,7 +157,7 @@ msgstr "Проводки"
#. module: account
#: selection:account.move.line,centralisation:0
msgid "Debit Centralisation"
msgstr ""
msgstr "Централизация Дебета"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_invoice_state_confirm
@ -343,7 +343,7 @@ msgstr "Номер счета"
#. module: account
#: rml:account.analytic.account.analytic.check:0
msgid "Delta Debit"
msgstr ""
msgstr "Дебетовое сальдо"
#. module: account
#: rml:account.invoice:0
@ -369,7 +369,7 @@ msgstr "Счет аналитического учета"
#: field:account.tax,child_depend:0
#: field:account.tax.template,child_depend:0
msgid "Tax on Children"
msgstr ""
msgstr "Налог на детей"
#. module: account
#: rml:account.central.journal:0

View File

@ -18,21 +18,61 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from operator import itemgetter
from osv import fields, osv
import netsvc
class account_installer(osv.osv_memory):
_name = 'account.installer'
_inherit = 'res.config.installer'
def _get_charts(self, cr, uid, context=None):
modules = self.pool.get('ir.module.module')
ids = modules.search(cr, uid, [('category_id','=','Account Charts')])
return list(
sorted(((m.name, m.shortdesc)
for m in modules.browse(cr, uid, ids)),
key=itemgetter(1)))
_columns = {
# Accounting
'account_analytic_default':fields.boolean('Analytic Accounting'),
'account_analytic_plans':fields.boolean('Multiple Analytic Plans'),
'account_payment':fields.boolean('Suppliers Payment Management'),
'account_followup':fields.boolean('Followups Management'),
'account_asset':fields.boolean('Assets Management')
'charts':fields.selection(_get_charts, 'Chart of Accounts',
required=True,
help="Installs localized accounting charts to match as closely as "
"possible the accounting needs of your company based on your "
"country."),
'account_analytic_default':fields.boolean('Analytic Accounting',
help="Automatically selects analytic accounts based on various "
"criteria."),
'account_analytic_plans':fields.boolean('Multiple Analytic Plans',
help="Allows invoice lines to impact multiple analytic accounts "
"simultaneously."),
'account_payment':fields.boolean('Suppliers Payment Management',
help="Streamlines invoice payment and creates hooks to plug "
"automated payment systems in."),
'account_followup':fields.boolean('Followups Management',
help="Helps you generate reminder letters for unpaid invoices, "
"including multiple levels of reminding and customized "
"per-partner policies."),
'account_asset':fields.boolean('Assets Management',
help="Enables asset management in the accounting application, "
"including asset categories and usage periods.")
}
_defaults = {
'account_analytic_default':True,
}
def modules_to_install(self, cr, uid, ids, context=None):
modules = super(account_installer, self).modules_to_install(
cr, uid, ids, context=context)
chart = self.read(cr, uid, ids, ['charts'],
context=context)[0]['charts']
self.logger.notifyChannel(
'installer', netsvc.LOG_DEBUG,
'Installing chart of accounts %s'%chart)
return modules | set([chart])
account_installer()

View File

@ -18,7 +18,7 @@
<record id="process_node_analytic0" model="process.node">
<field name="menu_id" ref="account.account_analytic_def_account"/>
<field name="model_id" ref="account.model_account_analytic_account"/>
<field name="model_id" ref="analytic.model_account_analytic_account"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Analytic Costs&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic costs to invoice&quot;&quot;&quot;" name="note"/>

View File

@ -18,7 +18,7 @@
<record id="process_node_analyticcost0" model="process.node">
<field name="menu_id" ref="account.account_analytic_def_account"/>
<field name="model_id" ref="account.model_account_analytic_account"/>
<field name="model_id" ref="analytic.model_account_analytic_account"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Analytic Costs&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic costs to invoice&quot;&quot;&quot;" name="note"/>

View File

@ -29,239 +29,6 @@ from osv import osv
# Object definition
#
class account_analytic_account(osv.osv):
_name = 'account.analytic.account'
_description = 'Analytic Accounts'
def _credit_calc(self, cr, uid, ids, name, arg, context={}):
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE l.amount<0 and a.id =ANY(%s) GROUP BY a.id",(ids,))
r = dict(cr.fetchall())
for i in ids:
r.setdefault(i,0.0)
return r
def _debit_calc(self, cr, uid, ids, name, arg, context={}):
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE l.amount>0 and a.id =ANY(%s) GROUP BY a.id" ,(ids,))
r= dict(cr.fetchall())
for i in ids:
r.setdefault(i,0.0)
return r
def _balance_calc(self, cr, uid, ids, name, arg, context={}):
res = {}
ids2 = self.search(cr, uid, [('parent_id', 'child_of', ids)])
for i in ids:
res.setdefault(i,0.0)
if not ids2:
return res
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE a.id =ANY(%s) GROUP BY a.id",(ids2,))
for account_id, sum in cr.fetchall():
res[account_id] = sum
cr.execute("SELECT a.id, r.currency_id FROM account_analytic_account a INNER JOIN res_company r ON (a.company_id = r.id) where a.id =ANY(%s)",(ids2,))
currency= dict(cr.fetchall())
res_currency= self.pool.get('res.currency')
for id in ids:
if id not in ids2:
continue
for child in self.search(cr, uid, [('parent_id', 'child_of', [id])]):
if child <> id:
res.setdefault(id, 0.0)
if currency[child]<>currency[id]:
res[id] += res_currency.compute(cr, uid, currency[child], currency[id], res.get(child, 0.0), context=context)
else:
res[id] += res.get(child, 0.0)
cur_obj = res_currency.browse(cr,uid,currency.values(),context)
cur_obj = dict([(o.id, o) for o in cur_obj])
for id in ids:
if id in ids2:
res[id] = res_currency.round(cr,uid,cur_obj[currency[id]],res.get(id,0.0))
return dict([(i, res[i]) for i in ids ])
def _quantity_calc(self, cr, uid, ids, name, arg, context={}):
#XXX must convert into one uom
res = {}
ids2 = self.search(cr, uid, [('parent_id', 'child_of', ids)])
acc_set = ",".join(map(str, ids2))
for i in ids:
res.setdefault(i,0.0)
if not acc_set:
return res
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute('SELECT a.id, COALESCE(SUM(l.unit_amount), 0) \
FROM account_analytic_account a \
LEFT JOIN account_analytic_line l ON (a.id = l.account_id ' + where_date + ') \
WHERE a.id =ANY(%s) GROUP BY a.id',(ids2,))
for account_id, sum in cr.fetchall():
res[account_id] = sum
for id in ids:
if id not in ids2:
continue
for child in self.search(cr, uid, [('parent_id', 'child_of', [id])]):
if child <> id:
res.setdefault(id, 0.0)
res[id] += res.get(child, 0.0)
return dict([(i, res[i]) for i in ids])
def name_get(self, cr, uid, ids, context={}):
if not len(ids):
return []
reads = self.read(cr, uid, ids, ['name','parent_id'], context)
res = []
for record in reads:
name = record['name']
if record['parent_id']:
name = record['parent_id'][1]+' / '+name
res.append((record['id'], name))
return res
def _complete_name_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict):
res = self.name_get(cr, uid, ids)
return dict(res)
def _get_company_currency(self, cr, uid, ids, field_name, arg, context={}):
result = {}
for rec in self.browse(cr, uid, ids, context):
result[rec.id] = (rec.company_id.currency_id.id,rec.company_id.currency_id.code) or False
return result
_columns = {
'name' : fields.char('Account Name', size=128, required=True),
'complete_name': fields.function(_complete_name_calc, method=True, type='char', string='Full Account Name'),
'code' : fields.char('Account Code', size=24),
# 'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the analytic account without removing it."),
'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type'),
'description' : fields.text('Description'),
'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2),
'child_ids': fields.one2many('account.analytic.account', 'parent_id', 'Child Accounts'),
'line_ids': fields.one2many('account.analytic.line', 'account_id', 'Analytic Entries'),
'balance' : fields.function(_balance_calc, method=True, type='float', string='Balance'),
'debit' : fields.function(_debit_calc, method=True, type='float', string='Debit'),
'credit' : fields.function(_credit_calc, method=True, type='float', string='Credit'),
'quantity': fields.function(_quantity_calc, method=True, type='float', string='Quantity'),
'quantity_max': fields.float('Maximum Quantity', help='Sets the higher limit of quantity of hours.'),
'partner_id' : fields.many2one('res.partner', 'Associated Partner'),
'contact_id' : fields.many2one('res.partner.address', 'Contact'),
'user_id' : fields.many2one('res.users', 'Account Manager'),
'date_start': fields.date('Date Start'),
'date': fields.date('Date End'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'company_currency_id': fields.function(_get_company_currency, method=True, type='many2one', relation='res.currency', string='Currency'),
'state': fields.selection([('draft','Draft'),('open','Open'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Close'),('template', 'Template')], 'State', required=True,readonly=True,
help='* When an account is created its in \'Draft\' state.\
\n* If any associated partner is there, it can be in \'Open\' state.\
\n* If any pending balance is there it can be in \'Pending\'. \
\n* And finally when all the transactions are over, it can be in \'Close\' state. \
\n* The project can be in either if the states \'Template\' and \'Running\'.\n If it is template then we can make projects based on the template projects. If its in \'Running\' state it is a normal project.\
\n If it is to be reviewed then the state is \'Pending\'.\n When the project is completed the state is set to \'Done\'.'),
}
def _default_company(self, cr, uid, context={}):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
return user.company_id.id
return self.pool.get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
_defaults = {
# 'active' : lambda *a : True,
'type' : lambda *a : 'normal',
'company_id': _default_company,
'state' : lambda *a : 'open',
'user_id' : lambda self,cr,uid,ctx : uid,
'partner_id': lambda self,cr, uid, ctx: ctx.get('partner_id', False),
'contact_id': lambda self,cr, uid, ctx: ctx.get('contact_id', False),
'date_start': lambda *a: time.strftime('%Y-%m-%d')
}
def check_recursion(self, cr, uid, ids, parent=None):
return super(account_analytic_account, self).check_recursion(cr, uid, ids, parent=parent)
_order = 'parent_id desc,code'
_constraints = [
(check_recursion, 'Error! You can not create recursive analytic accounts.', ['parent_id'])
]
def create(self, cr, uid, vals, context=None):
parent_id = vals.get('parent_id', 0)
if ('code' not in vals or not vals['code']) and not parent_id:
vals['code'] = self.pool.get('ir.sequence').get(cr, uid, 'account.analytic.account')
return super(account_analytic_account, self).create(cr, uid, vals, context=context)
def copy(self, cr, uid, id, default=None, context={}):
if not default:
default = {}
default['code'] = False
default['line_ids'] = []
return super(account_analytic_account, self).copy(cr, uid, id, default, context=context)
def on_change_parent(self, cr, uid, id, parent_id):
if not parent_id:
return {}
parent = self.read(cr, uid, [parent_id], ['partner_id','code'])[0]
childs = self.search(cr, uid, [('parent_id', '=', parent_id), ('active', 'in', [True, False])])
numchild = len(childs)
if parent['partner_id']:
partner = parent['partner_id'][0]
else:
partner = False
res = {'value' : {'code' : '%s - %03d' % (parent['code'] or '', numchild + 1),}}
if partner:
res['value']['partner_id'] = partner
return res
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args=[]
if not context:
context={}
account = self.search(cr, uid, [('code', '=', name)]+args, limit=limit, context=context)
if not account:
account = self.search(cr, uid, [('name', 'ilike', '%%%s%%' % name)]+args, limit=limit, context=context)
newacc = account
while newacc:
newacc = self.search(cr, uid, [('parent_id', 'in', newacc)]+args, limit=limit, context=context)
account+=newacc
return self.name_get(cr, uid, account, context=context)
account_analytic_account()
class account_analytic_journal(osv.osv):
_name = 'account.analytic.journal'
_columns = {

View File

@ -34,7 +34,7 @@
"access_account_bank_statement_line","account.bank.statement.line","model_account_bank_statement_line","account.group_account_user",1,1,1,1
"access_account_analytic_line","account.analytic.line","model_account_analytic_line","account.group_account_user",1,1,1,1
"access_report_hr_timesheet_invoice_journal","report.hr.timesheet.invoice.journal","model_report_hr_timesheet_invoice_journal","account.group_account_manager",1,0,0,0
"access_account_analytic_account","account.analytic.account","model_account_analytic_account","base.group_user",1,0,0,0
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","base.group_user",1,0,0,0
"access_account_analytic_journal","account.analytic.journal","model_account_analytic_journal","account.group_account_user",1,0,0,0
"access_account_invoice_uinvoice","account.invoice","model_account_invoice","account.group_account_invoice",1,1,1,1
"access_account_invoice_line_uinvoice","account.invoice.line","model_account_invoice_line","account.group_account_invoice",1,1,1,1
@ -58,7 +58,7 @@
"access_account_tax_code_manager","account.tax.code","model_account_tax_code","account.group_account_manager",1,1,1,1
"access_account_tax_manager","account.tax","model_account_tax","account.group_account_manager",1,1,1,1
"access_account_invoice_group_invoice","account.invoice group invoice","model_account_invoice","account.group_account_invoice",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","model_account_analytic_account","account.group_account_manager",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","account.group_account_manager",1,1,1,1
"access_account_analytic_journal_manager","account.analytic.journal","model_account_analytic_journal","account.group_account_manager",1,1,1,1
"access_account_fiscalyear","account.fiscalyear","model_account_fiscalyear","account.group_account_manager",1,1,1,1
"access_account_fiscalyear_user","account.fiscalyear.user","model_account_fiscalyear","account.group_account_user",1,0,0,0
@ -87,6 +87,3 @@
"access_account_fiscal_position_account_template","account.fiscal.position.account.template","model_account_fiscal_position_account_template","account.group_account_manager",1,1,1,1
"access_account_sequence_fiscal_year","account.sequence.fiscalyear","model_account_sequence_fiscalyear","account.group_account_user",1,1,1,1
"access_account_sequence_fiscal_year_user","account.sequence.fiscalyear user","model_account_sequence_fiscalyear","base.group_user",1,0,0,0
"access_wizard_company_setup_manager","wizard.company.setup manager","model_wizard_company_setup","account.group_account_manager",1,1,1,1
"access_wizard_company_setup","wizard.company.setup","model_wizard_company_setup","account.group_account_user",1,0,0,0
"access_wizard_company_setup_user","wizard.company.setup user","model_wizard_company_setup","base.group_user",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
34 access_account_bank_statement_line account.bank.statement.line model_account_bank_statement_line account.group_account_user 1 1 1 1
35 access_account_analytic_line account.analytic.line model_account_analytic_line account.group_account_user 1 1 1 1
36 access_report_hr_timesheet_invoice_journal report.hr.timesheet.invoice.journal model_report_hr_timesheet_invoice_journal account.group_account_manager 1 0 0 0
37 access_account_analytic_account account.analytic.account model_account_analytic_account analytic.model_account_analytic_account base.group_user 1 0 0 0
38 access_account_analytic_journal account.analytic.journal model_account_analytic_journal account.group_account_user 1 0 0 0
39 access_account_invoice_uinvoice account.invoice model_account_invoice account.group_account_invoice 1 1 1 1
40 access_account_invoice_line_uinvoice account.invoice.line model_account_invoice_line account.group_account_invoice 1 1 1 1
58 access_account_tax_code_manager account.tax.code model_account_tax_code account.group_account_manager 1 1 1 1
59 access_account_tax_manager account.tax model_account_tax account.group_account_manager 1 1 1 1
60 access_account_invoice_group_invoice account.invoice group invoice model_account_invoice account.group_account_invoice 1 1 1 1
61 access_account_analytic_account_manager account.analytic.account model_account_analytic_account analytic.model_account_analytic_account account.group_account_manager 1 1 1 1
62 access_account_analytic_journal_manager account.analytic.journal model_account_analytic_journal account.group_account_manager 1 1 1 1
63 access_account_fiscalyear account.fiscalyear model_account_fiscalyear account.group_account_manager 1 1 1 1
64 access_account_fiscalyear_user account.fiscalyear.user model_account_fiscalyear account.group_account_user 1 0 0 0
87 access_account_fiscal_position_account_template account.fiscal.position.account.template model_account_fiscal_position_account_template account.group_account_manager 1 1 1 1
88 access_account_sequence_fiscal_year account.sequence.fiscalyear model_account_sequence_fiscalyear account.group_account_user 1 1 1 1
89 access_account_sequence_fiscal_year_user account.sequence.fiscalyear user model_account_sequence_fiscalyear base.group_user 1 0 0 0
access_wizard_company_setup_manager wizard.company.setup manager model_wizard_company_setup account.group_account_manager 1 1 1 1
access_wizard_company_setup wizard.company.setup model_wizard_company_setup account.group_account_user 1 0 0 0
access_wizard_company_setup_user wizard.company.setup user model_wizard_company_setup base.group_user 1 0 0 0

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 06:23+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2010-02-06 17:39+0000\n"
"Last-Translator: omar <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: 2009-12-16 05:18+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:38+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_analytic_default
@ -77,7 +77,7 @@ msgstr ""
#. module: account_analytic_default
#: field:account.analytic.default,user_id:0
msgid "User"
msgstr ""
msgstr "المستخدم"
#. module: account_analytic_default
#: constraint:ir.actions.act_window:0

View File

@ -18,17 +18,18 @@
#
##############################################################################
{
"name" : "Stock Account",
"version" : "1.1",
"author" : "Tiny",
"website" : "http://tinyerp.com",
"name" : "Stock Accounting for Anglo Saxon countries",
"version" : "1.2",
"author" : "Tiny, Veritos",
"website" : "http://tinyerp.com - http://veritos.nl",
"description" : """This module will support the Anglo-Saxons accounting methodology by
changing the accounting logic with stock transactions. The difference between the Anglo-Saxon accounting countries
and the Rhine or also called Continental accounting countries is the moment of taking the Cost of Goods Sold versus Cost of Sales.
Anglo-Saxons accounting does take the cost when sales invoice is created, Continental accounting will take the cost at he moment the goods are shipped.
This module will add this functionality by using a interim account, to store the value of shipped goods and will contra book this interim account
when the invoice is created to transfer this amount to the debtor or creditor account.""",
"depends" : ["product", "account", "sale", "purchase"],
when the invoice is created to transfer this amount to the debtor or creditor account.
Secondly, price differences between actual purchase price and fixed product standard price are booked on a seperate account""",
"depends" : ["product", "account", "sale", "purchase", "stock"],
"category" : "Generic Modules/Inventory Control",
"init_xml" : [],
"demo_xml" : [],

View File

@ -1,7 +1,10 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
# Copyright (C)
# 2004-2010 Tiny SPRL (<http://tiny.be>).
# 2009-2010 Veritos (http://veritos.nl).
# All Rights Reserved
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@ -30,14 +33,20 @@ class account_invoice_line(osv.osv):
for i_line in inv.invoice_line:
if i_line.product_id:
if inv.type == 'out_invoice':
# debit account dacc will be the output account
# first check the product, if empty check the category
dacc = i_line.product_id.product_tmpl_id.property_stock_account_output and i_line.product_id.product_tmpl_id.property_stock_account_output.id
if not dacc:
dacc = i_line.product_id.categ_id.property_stock_account_output_categ and i_line.product_id.categ_id.property_stock_account_output_categ.id
else:
# = out_refund
# debit account dacc will be the input account
# first check the product, if empty check the category
dacc = i_line.product_id.product_tmpl_id.property_stock_account_input and i_line.product_id.product_tmpl_id.property_stock_account_input.id
if not dacc:
dacc = i_line.product_id.categ_id.property_stock_account_input_categ and i_line.product_id.categ_id.property_stock_account_input_categ.id
# in both cases the credit account cacc will be the expense account
# first check the product, if empty check the category
cacc = i_line.product_id.product_tmpl_id.property_account_expense and i_line.product_id.product_tmpl_id.property_account_expense.id
if not cacc:
cacc = i_line.product_id.categ_id.property_account_expense_categ and i_line.product_id.categ_id.property_account_expense_categ.id
@ -71,27 +80,36 @@ class account_invoice_line(osv.osv):
for i_line in inv.invoice_line:
if i_line.product_id:
if i_line.product_id.product_tmpl_id.type != 'service':
# get the price difference account at the product
acc = i_line.product_id.product_tmpl_id.property_account_creditor_price_difference and i_line.product_id.product_tmpl_id.property_account_creditor_price_difference.id
if not acc:
# if not found on the product get the price difference account at the category
acc = i_line.product_id.categ_id.property_account_creditor_price_difference_categ and i_line.product_id.categ_id.property_account_creditor_price_difference_categ.id
a = None
if inv.type == 'in_invoice':
# oa will be the stock input account
# first check the product, if empty check the category
oa = i_line.product_id.product_tmpl_id.property_stock_account_input and i_line.product_id.product_tmpl_id.property_stock_account_input.id
if not oa:
oa = i_line.product_id.categ_id.property_stock_account_input_categ and i_line.product_id.categ_id.property_stock_account_input_categ.id
else:
# = in_refund
# oa will be the stock output account
# first check the product, if empty check the category
oa = i_line.product_id.product_tmpl_id.property_stock_account_output and i_line.product_id.product_tmpl_id.property_stock_account_output.id
if not oa:
oa = i_line.product_id.categ_id.property_stock_account_output_categ and i_line.product_id.categ_id.property_stock_account_output_categ.id
if oa:
# get the fiscal position
fpos = i_line.invoice_id.fiscal_position or False
a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa)
diff_res = []
# calculate and write down the possible price difference between invoice price and product price
for line in res:
if a == line['account_id'] and i_line.product_id.id == line['product_id']:
uom = i_line.product_id.uos_id or i_line.product_id.uom_id
standard_price = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.product_tmpl_id.standard_price, i_line.uos_id.id)
if standard_price != i_line.price_unit and line['price'] == i_line.price_unit and acc:
if standard_price != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc:
price_diff = i_line.price_unit - standard_price
line.update({'price':standard_price * line['quantity']})
diff_res.append({

View File

@ -43,6 +43,18 @@ class stock_picking(osv.osv):
fpos = ol.invoice_id.fiscal_position or False
a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa)
self.pool.get('account.invoice.line').write(cr, uid, [ol.id], {'account_id': a})
elif type == 'in_invoice':
for inv in self.pool.get('account.invoice').browse(cr, uid, res.values(), context=context):
for ol in inv.invoice_line:
if ol.product_id:
oa = ol.product_id.product_tmpl_id.property_stock_account_input and ol.product_id.product_tmpl_id.property_stock_account_input.id
if not oa:
oa = ol.product_id.categ_id.property_stock_account_input_categ and ol.product_id.categ_id.property_stock_account_input_categ.id
if oa:
fpos = ol.invoice_id.fiscal_position or False
a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa)
self.pool.get('account.invoice.line').write(cr, uid, [ol.id], {'account_id': a})
return res
stock_picking()

View File

@ -19,8 +19,7 @@
#
##############################################################################
import wizard_base_setup
import project
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name" : "Analytic Account",
"version": "1.1",
"author" : "Tiny",
"website" : "http://www.openerp.com",
"category" : "Generic Modules/Projects & Services",
"depends" : ["base"],
"description": """Module for defining analytic accounting object.
""",
"init_xml" : [],
"update_xml": ["security/ir.model.access.csv",
],
'demo_xml': [
],
'installable': True,
'active': False,
'certificate': '',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

262
addons/analytic/project.py Normal file
View File

@ -0,0 +1,262 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import time
import operator
from osv import fields
from osv import osv
#
# Object definition
#
class account_analytic_account(osv.osv):
_name = 'account.analytic.account'
_description = 'Analytic Accounts'
def _credit_calc(self, cr, uid, ids, name, arg, context={}):
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE l.amount<0 and a.id =ANY(%s) GROUP BY a.id",(ids,))
r = dict(cr.fetchall())
for i in ids:
r.setdefault(i,0.0)
return r
def _debit_calc(self, cr, uid, ids, name, arg, context={}):
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE l.amount>0 and a.id =ANY(%s) GROUP BY a.id" ,(ids,))
r= dict(cr.fetchall())
for i in ids:
r.setdefault(i,0.0)
return r
def _balance_calc(self, cr, uid, ids, name, arg, context={}):
res = {}
ids2 = self.search(cr, uid, [('parent_id', 'child_of', ids)])
for i in ids:
res.setdefault(i,0.0)
if not ids2:
return res
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute("SELECT a.id, COALESCE(SUM(l.amount),0) FROM account_analytic_account a LEFT JOIN account_analytic_line l ON (a.id=l.account_id "+where_date+") WHERE a.id =ANY(%s) GROUP BY a.id",(ids2,))
for account_id, sum in cr.fetchall():
res[account_id] = sum
cr.execute("SELECT a.id, r.currency_id FROM account_analytic_account a INNER JOIN res_company r ON (a.company_id = r.id) where a.id =ANY(%s)",(ids2,))
currency= dict(cr.fetchall())
res_currency= self.pool.get('res.currency')
for id in ids:
if id not in ids2:
continue
for child in self.search(cr, uid, [('parent_id', 'child_of', [id])]):
if child <> id:
res.setdefault(id, 0.0)
if currency[child]<>currency[id]:
res[id] += res_currency.compute(cr, uid, currency[child], currency[id], res.get(child, 0.0), context=context)
else:
res[id] += res.get(child, 0.0)
cur_obj = res_currency.browse(cr,uid,currency.values(),context)
cur_obj = dict([(o.id, o) for o in cur_obj])
for id in ids:
if id in ids2:
res[id] = res_currency.round(cr,uid,cur_obj[currency[id]],res.get(id,0.0))
return dict([(i, res[i]) for i in ids ])
def _quantity_calc(self, cr, uid, ids, name, arg, context={}):
#XXX must convert into one uom
res = {}
ids2 = self.search(cr, uid, [('parent_id', 'child_of', ids)])
acc_set = ",".join(map(str, ids2))
for i in ids:
res.setdefault(i,0.0)
if not acc_set:
return res
where_date = ''
if context.get('from_date',False):
where_date += " AND l.date >= '" + context['from_date'] + "'"
if context.get('to_date',False):
where_date += " AND l.date <= '" + context['to_date'] + "'"
cr.execute('SELECT a.id, COALESCE(SUM(l.unit_amount), 0) \
FROM account_analytic_account a \
LEFT JOIN account_analytic_line l ON (a.id = l.account_id ' + where_date + ') \
WHERE a.id =ANY(%s) GROUP BY a.id',(ids2,))
for account_id, sum in cr.fetchall():
res[account_id] = sum
for id in ids:
if id not in ids2:
continue
for child in self.search(cr, uid, [('parent_id', 'child_of', [id])]):
if child <> id:
res.setdefault(id, 0.0)
res[id] += res.get(child, 0.0)
return dict([(i, res[i]) for i in ids])
def name_get(self, cr, uid, ids, context={}):
if not len(ids):
return []
reads = self.read(cr, uid, ids, ['name','parent_id'], context)
res = []
for record in reads:
name = record['name']
if record['parent_id']:
name = record['parent_id'][1]+' / '+name
res.append((record['id'], name))
return res
def _complete_name_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict):
res = self.name_get(cr, uid, ids)
return dict(res)
def _get_company_currency(self, cr, uid, ids, field_name, arg, context={}):
result = {}
for rec in self.browse(cr, uid, ids, context):
result[rec.id] = (rec.company_id.currency_id.id,rec.company_id.currency_id.code) or False
return result
_columns = {
'name' : fields.char('Account Name', size=128, required=True),
'complete_name': fields.function(_complete_name_calc, method=True, type='char', string='Full Account Name'),
'code' : fields.char('Account Code', size=24),
# 'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the analytic account without removing it."),
'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type'),
'description' : fields.text('Description'),
'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2),
'child_ids': fields.one2many('account.analytic.account', 'parent_id', 'Child Accounts'),
'line_ids': fields.one2many('account.analytic.line', 'account_id', 'Analytic Entries'),
'balance' : fields.function(_balance_calc, method=True, type='float', string='Balance'),
'debit' : fields.function(_debit_calc, method=True, type='float', string='Debit'),
'credit' : fields.function(_credit_calc, method=True, type='float', string='Credit'),
'quantity': fields.function(_quantity_calc, method=True, type='float', string='Quantity'),
'quantity_max': fields.float('Maximum Quantity', help='Sets the higher limit of quantity of hours.'),
'partner_id' : fields.many2one('res.partner', 'Associated Partner'),
'contact_id' : fields.many2one('res.partner.address', 'Contact'),
'user_id' : fields.many2one('res.users', 'Account Manager'),
'date_start': fields.date('Date Start'),
'date': fields.date('Date End'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'company_currency_id': fields.function(_get_company_currency, method=True, type='many2one', relation='res.currency', string='Currency'),
'state': fields.selection([('draft','Draft'),('open','Open'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Close'),('template', 'Template')], 'State', required=True,readonly=True,
help='* When an account is created its in \'Draft\' state.\
\n* If any associated partner is there, it can be in \'Open\' state.\
\n* If any pending balance is there it can be in \'Pending\'. \
\n* And finally when all the transactions are over, it can be in \'Close\' state. \
\n* The project can be in either if the states \'Template\' and \'Running\'.\n If it is template then we can make projects based on the template projects. If its in \'Running\' state it is a normal project.\
\n If it is to be reviewed then the state is \'Pending\'.\n When the project is completed the state is set to \'Done\'.'),
}
def _default_company(self, cr, uid, context={}):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
return user.company_id.id
return self.pool.get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
_defaults = {
# 'active' : lambda *a : True,
'type' : lambda *a : 'normal',
'company_id': _default_company,
'state' : lambda *a : 'open',
'user_id' : lambda self,cr,uid,ctx : uid,
'partner_id': lambda self,cr, uid, ctx: ctx.get('partner_id', False),
'contact_id': lambda self,cr, uid, ctx: ctx.get('contact_id', False),
'date_start': lambda *a: time.strftime('%Y-%m-%d')
}
def check_recursion(self, cr, uid, ids, parent=None):
return super(account_analytic_account, self).check_recursion(cr, uid, ids, parent=parent)
_order = 'parent_id desc,code'
_constraints = [
(check_recursion, 'Error! You can not create recursive analytic accounts.', ['parent_id'])
]
def create(self, cr, uid, vals, context=None):
parent_id = vals.get('parent_id', 0)
if ('code' not in vals or not vals['code']) and not parent_id:
vals['code'] = self.pool.get('ir.sequence').get(cr, uid, 'account.analytic.account')
return super(account_analytic_account, self).create(cr, uid, vals, context=context)
def copy(self, cr, uid, id, default=None, context={}):
if not default:
default = {}
default['code'] = False
default['line_ids'] = []
return super(account_analytic_account, self).copy(cr, uid, id, default, context=context)
def on_change_parent(self, cr, uid, id, parent_id):
if not parent_id:
return {}
parent = self.read(cr, uid, [parent_id], ['partner_id','code'])[0]
childs = self.search(cr, uid, [('parent_id', '=', parent_id), ('active', 'in', [True, False])])
numchild = len(childs)
if parent['partner_id']:
partner = parent['partner_id'][0]
else:
partner = False
res = {'value' : {'code' : '%s - %03d' % (parent['code'] or '', numchild + 1),}}
if partner:
res['value']['partner_id'] = partner
return res
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args=[]
if not context:
context={}
account = self.search(cr, uid, [('code', '=', name)]+args, limit=limit, context=context)
if not account:
account = self.search(cr, uid, [('name', 'ilike', '%%%s%%' % name)]+args, limit=limit, context=context)
newacc = account
while newacc:
newacc = self.search(cr, uid, [('parent_id', 'in', newacc)]+args, limit=limit, context=context)
account+=newacc
return self.name_get(cr, uid, account, context=context)
account_analytic_account()

View File

@ -0,0 +1 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink

View File

@ -203,9 +203,6 @@ class base_action_rule_line(osv.osv):
'trg_priority_from': fields.selection([('','')] + AVAILABLE_PRIORITIES, 'Minimum Priority'),
'trg_priority_to': fields.selection([('','')] + AVAILABLE_PRIORITIES, 'Maximum Priority'),
'act_method': fields.char('Call Object Method', size=64),
'act_state': fields.selection([('','')]+AVAILABLE_STATES, 'Set state to', size=16),
'act_user_id': fields.many2one('res.users', 'Set responsible to'),
'act_priority': fields.selection([('','')] + AVAILABLE_PRIORITIES, 'Set priority to'),

View File

@ -20,7 +20,62 @@
##############################################################################
import installer
import todo
import wizard
from osv import osv
import netsvc
class base_setup_config_choice(osv.osv_memory):
"""
"""
_name = 'base.setup.config'
logger = netsvc.Logger()
def set_default_menu(self, cr, uid, menu, context=None):
user = self.pool.get('res.users')\
.browse(cr, uid, uid, context=context)
user.write({'action_id': menu.id,
'menu_id': menu.id})
def get_default_menu(self, cr, uid, context=None):
actions = self.pool.get('ir.actions.act_window')
current_menu_id = actions.search(cr, uid, [('name','=','Menu')],
context=context)
assert len(current_menu_id) == 1,\
'A given user should only have one menu item'
return actions.browse(cr, uid, current_menu_id[0], context=context)
def menu(self, cr, uid, ids, context=None):
menu = self.get_default_menu(cr, uid, context=context)
self.set_default_menu(cr, uid, menu, context=context)
if menu.view_id.id:
view_id = (menu.view_id.id, menu.view_id.name)
else:
view_id = False
return {
'name': menu.name,
'type': menu.type,
'view_id': view_id,
'domain': menu.domain,
'res_users': menu.res_model,
'src_model': menu.src_model,
'view_type': menu.view_type,
'view_mode': menu.view_mode,
'views': menu.views,
}
def config(self, cr, uid, ids, context=None):
menu = self.get_default_menu(cr, uid, context=context)
self.set_default_menu(cr, uid, menu, context=context)
return self.pool.get('res.config').next(cr, uid, [], context=context)
base_setup_config_choice()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,7 +15,7 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
@ -42,8 +42,8 @@
'depends': ['base'],
'init_xml': ['base_setup_data.xml'],
'update_xml': ['security/ir.model.access.csv',
'base_setup_wizard.xml',
'base_setup_installer.xml'],
'base_setup_installer.xml',
'base_setup_todo.xml',],
'demo_xml': ['base_setup_demo.xml'],
'installable': True,
'active': True,

View File

@ -1,17 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="action_wizard_setup" model="ir.actions.wizard">
<field name="name">Setup</field>
<field name="type">ir.actions.wizard</field>
<field name="wiz_name">base_setup.base_setup</field>
</record>
<record id="base.user_root" model="res.users">
<field name="action_id" ref="action_wizard_setup"/>
<field name="menu_id" ref="action_wizard_setup"/>
</record>
</data>
<data noupdate="1">
<record id="view_base_setup" model="ir.ui.view">
<field name="name">Setup</field>
<field name="model">base.setup.config</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Setup">
<group colspan="4">
<image name="gtk-dialog-info"/>
<group colspan="2" col="4">
<separator colspan="4" string="Installation Done"/>
<label align="0.0" colspan="4"
string="Your new database is now fully installed."/>
<label align="0.0" colspan="4"
string="You can start configuring the system or connect directly to the database using the default setup."/>
</group>
</group>
<button name="menu" icon="gtk-ok" type="object"
string="Use Directly"/>
<button name="config" icon="gtk-go-forward" type="object"
string="Start Configuration"/>
</form>
</field>
</record>
<record id="action_base_setup" model="ir.actions.act_window">
<field name="name">Setup</field>
<field name="res_model">base.setup.config</field>
<field name="type">ir.actions.act_window</field>
<field name="view_id" ref="view_base_setup"/>
<field name="target">new</field>
</record>
<record id="base.user_root" model="res.users">
<field name="action_id" ref="action_base_setup"/>
<field name="menu_id" ref="action_base_setup"/>
</record>
</data>
</openerp>

View File

@ -3,7 +3,7 @@
<data noupdate="1">
<record id="base.user_demo" model="res.users">
<field name="action_id" ref="action_wizard_setup"/>
<field name="action_id" ref="action_base_setup"/>
</record>
</data>

View File

@ -4,51 +4,37 @@
<field name="name">base.setup.installer.view</field>
<field name="model">base.setup.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Base Setup Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Base Setup Modules Installation</attribute>
</form>
<separator string="title" position="attributes">
<attribute name="string">Install Modules</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string"
>Now that OpenERP is installed, we have selected applications commonly useful to users which you can install directly, as well as sets of applications for more specific types or groups of businesses (the vertical modules).
<group string="res_config_contents" position="replace">
<separator string="Install Modules" colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Generic Modules" colspan="4"/>
<field name="crm"/> <field name="sale"/>
<field name="project"/> <field name="knowledge"/>
<field name="stock"/> <field name="mrp"/>
<field name="account"/>
<field name="charts" attrs="{'readonly':[('account','=',False)]}"/>
<field name="purchase"/> <field name="hr"/>
<field name="point_of_sale"/> <field name="marketing"/>
<field name="misc_tools"/> <field name="report_designer"/>
<separator string="Generic Modules" colspan="4"/>
<field name="profile_association"/>
<field name="profile_training"/>
<field name="profile_auction"/>
<field name="profile_bookstore"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
If you don't think you need any of these right now, you can easily install them later on.</attribute>
</xpath>
<group colspan="8">
<separator string="Generic Modules" colspan="4"/>
<field name="crm"/> <field name="sale"/>
<field name="project"/> <field name="knowledge"/>
<field name="stock"/> <field name="mrp"/>
<field name="account"/> <field name="purchase"/>
<field name="hr"/> <field name="point_of_sale"/>
<field name="marketing"/> <field name="misc_tools"/>
<field name="report_designer"/>
<separator string="Vertical Modules" colspan="4"/>
<field name="profile_association"/>
<field name="profile_training"/>
<field name="profile_auction"/>
<field name="profile_bookstore"/>
</group>
</data>
</field>
</record>
@ -65,7 +51,7 @@
<record id="base_setup_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_base_setup_installer"/>
<field name="sequence">1</field>
<field name="sequence">2</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,61 @@
<openerp>
<data>
<record id="view_base_setup_company" model="ir.ui.view">
<field name="name">Setup company information</field>
<field name="model">base.setup.company</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes">
<attribute name="string">Main Company Setup</attribute>
</form>
<group string="res_config_contents" position="replace">
<field name="company_id" invisible="1"/>
<separator string="Define Main Company" colspan="4"/>
<field name="name" colspan="4" required="True"/>
<newline/>
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="state_id"/>
<field name="email"/>
<field name="phone"/>
<field name="currency"/>
<separator string="Report Information" colspan="4"/>
<field name="rml_header1" colspan="4"/>
<field name="rml_footer1" colspan="4"/>
<field name="rml_footer2" colspan="4"/>
<separator colspan="4"
string="Your Logo - Use a size of about 450x150 pixels."/>
<field colspan="4" name="logo" widget="image"
nolabel="1"/>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
</data>
</field>
</record>
<record id="action_base_setup_company" model="ir.actions.act_window">
<field name="name">Setup company information</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">base.setup.company</field>
<field name="view_id" ref="view_base_setup_company"/>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="base_setup_company_todo" model="ir.actions.todo">
<field name="action_id" ref="action_base_setup_company"/>
<field name="sequence">1</field>
</record>
</data>
</openerp>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<wizard id="wizard_base_setup" model="base_setup.base_setup" name="base_setup.base_setup" string="Setup"/>
</data>
</openerp>

View File

@ -19,57 +19,77 @@
#
##############################################################################
from osv import fields, osv
from itertools import chain
from operator import itemgetter
import netsvc
class base_setup_installer(osv.osv_memory):
_name = 'base.setup.installer'
_inherit = 'res.config.installer'
def _get_charts(self, cr, uid, context=None):
modules = self.pool.get('ir.module.module')
ids = modules.search(cr, uid, [('category_id','=','Account Charts'),
('state','!=','installed')])
return list(
sorted(((m.name, m.shortdesc)
for m in modules.browse(cr, uid, ids)),
key=itemgetter(1)))
def _if_account(self, cr, uid, ids, context=None):
chart = self.read(cr, uid, ids, ['charts'],
context=context)[0]['charts']
self.logger.notifyChannel(
'installer', netsvc.LOG_DEBUG,
'Addon "account" selected, installing chart of accounts %s'%chart)
return [chart]
_install_if = {
('sale','crm'): ['sale_crm'],
('sale','project'): ['project_mrp'],
}
_columns = {
# Generic modules
'crm':fields.boolean('Customer Relationship Management'),
'sale':fields.boolean('Sales Management'),
'project':fields.boolean('Project Management'),
'knowledge':fields.boolean('Knowledge Management'),
'stock':fields.boolean('Warehouse Management'),
'mrp':fields.boolean('Manufacturing'),
'account':fields.boolean('Financial & Accounting'),
'charts':fields.selection(_get_charts, 'Chart of Accounts',
readonly=True),
'purchase':fields.boolean('Purchase Management'),
'hr':fields.boolean('Human Resources'),
'point_of_sale':fields.boolean('Point of Sales'),
'marketing':fields.boolean('Marketing'),
'misc_tools':fields.boolean('Miscellaneous Tools'),
'report_designer':fields.boolean('Advanced Reporting'),
'crm':fields.boolean('Customer Relationship Management',
help="Helps you track and manage relations with customers such as"
" leads, requests or issues. Can automatically send "
"reminders, escalate requests or trigger business-specific "
"actions based on standard events."),
'sale':fields.boolean('Sales Management',
help="Helps you handle your quotations, sale orders and invoicing"
"."),
'project':fields.boolean('Project Management',
help="Helps you manage your projects and tasks by tracking them, "
"generating plannings, etc..."),
'knowledge':fields.boolean('Knowledge Management',
help="Lets you install addons geared towards sharing knowledge "
"with and between your employees."),
'stock':fields.boolean('Warehouse Management',
help="Helps you manage your stocks and stocks locations, as well "
"as the flow of stock between warehouses."),
'mrp':fields.boolean('Manufacturing',
help="Helps you manage your manufacturing processes and generate "
"reports on those processes."),
'account':fields.boolean('Financial & Accounting',
help="Helps you handle your accounting needs, as well as create "
"and track your budgets."),
'purchase':fields.boolean('Purchase Management',
help="Helps you manage your purchase-related processes such as "
"requests for quotations, supplier invoices, etc..."),
'hr':fields.boolean('Human Resources',
help="Helps you manage your human resources by encoding your "
"employee structure, generating work sheets, tracking "
"attendance and more."),
'point_of_sale':fields.boolean('Point of Sales',
help="Helps you get the most out of your points of sales with "
"fast sale encoding, simplified payment mode encoding, "
"automatic picking lists generation and more."),
'marketing':fields.boolean('Marketing',
help="Helps you manage your marketing campaigns step by step."),
'misc_tools':fields.boolean('Miscellaneous Tools',
help="Lets you install various interesting but non-essential "
"tools."),
'report_designer':fields.boolean('Advanced Reporting',
help="Lets you install various tools to simplify and enhance "
"OpenERP's report creation."),
# Vertical modules
'profile_association':fields.boolean('Associations'),
'profile_training':fields.boolean('Training Centers'),
'profile_auction':fields.boolean('Auction Houses'),
'profile_bookstore':fields.boolean('Book Stores'),
'profile_association':fields.boolean('Associations',
help="Installs a preselected set of OpenERP "
"applications which will help you manage your association "
"more efficiently."),
'profile_training':fields.boolean('Training Centers',
help="Helps you manage your training sessions and "
"centers, from the conception of a training project to the "
"gathering of trainee feedback."),
'profile_auction':fields.boolean('Auction Houses',
help="Installs a preselected set of OpenERP "
"applications selected to help you manage your auctions "
"as well as the business processes around them."),
'profile_bookstore':fields.boolean('Book Stores',
help="Installs a preselected set of OpenERP "
"applications which will help you manage your book store "
"or your library."),
}
_defaults = {
'crm': True,

152
addons/base_setup/todo.py Normal file
View File

@ -0,0 +1,152 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from operator import itemgetter
from osv import osv, fields
import netsvc
import tools
class base_setup_company(osv.osv_memory):
"""
"""
_name = 'base.setup.company'
_inherit = 'res.config'
logger = netsvc.Logger()
def _get_all(self, cr, uid, model, context=None):
models = self.pool.get(model)
all_model_ids = models.search(cr, uid, [])
output = [(False, '')]
output.extend(
sorted([(o.id, o.name)
for o in models.browse(cr, uid, all_model_ids,
context=context)],
key=itemgetter(1)))
return output
def _get_all_states(self, cr, uid, context=None):
return self._get_all(
cr, uid, 'res.country.state', context=context)
def _get_all_countries(self, cr, uid, context=None):
return self._get_all(cr, uid, 'res.country', context=context)
def _get_all_currencies(self, cr, uid, context=None):
return self._get_all(cr, uid, 'res.currency', context=context)
def default_get(self, cr, uid, fields_list=None, context=None):
""" get default company if any, and the various other fields
from the company's fields
"""
defaults = super(base_setup_company, self)\
.default_get(cr, uid, fields_list=fields_list, context=context)
companies = self.pool.get('res.company')
company_id = companies.search(cr, uid, [], limit=1, order="id")
if not company_id or 'company_id' not in fields_list:
return defaults
company = companies.browse(cr, uid, company_id[0])
defaults['company_id'] = company.id
defaults['currency'] = company.currency_id.id
for field in ['name','logo','rml_header1','rml_footer1','rml_footer2']:
defaults[field] = company[field]
if company.partner_id.address:
address = company.partner_id.address[0]
for field in ['street','street2','zip','city','email','phone']:
defaults[field] = address[field]
for field in ['country_id','state_id']:
if address[field]:
defaults[field] = address[field].id
return defaults
_columns = {
'company_id':fields.many2one('res.company', 'Company'),
'name':fields.char('Company Name', size=64, required=True),
'street':fields.char('Street', size=128),
'street2':fields.char('Street 2', size=128),
'zip':fields.char('Zip Code', size=24),
'city':fields.char('City', size=128),
'state_id':fields.selection(_get_all_states, 'States'),
'country_id':fields.selection(_get_all_countries, 'Countries'),
'email':fields.char('E-mail', size=64),
'phone':fields.char('Phone', size=64),
'currency':fields.selection(_get_all_currencies, 'Currency', required=True),
'rml_header1':fields.char('Report Header', size=200,
help='''This sentence will appear at the top right corner of your reports.
We suggest you to put a slogan here:
"Open Source Business Solutions".'''),
'rml_footer1':fields.char('Report Footer 1', size=200,
help='''This sentence will appear at the bottom of your reports.
We suggest you to write legal sentences here:
Web: http://openerp.com - Fax: +32.81.73.35.01 - Fortis Bank: 126-2013269-07'''),
'rml_footer2':fields.char('Report Footer 2', size=200,
help='''This sentence will appear at the bottom of your reports.
We suggest you to put bank information here:
IBAN: BE74 1262 0121 6907 - SWIFT: CPDF BE71 - VAT: BE0477.472.701'''),
'logo':fields.binary('Logo'),
}
def execute(self, cr, uid, ids, context=None):
assert len(ids) == 1, "We should only get one object from the form"
payload = self.browse(cr, uid, ids[0], context=context)
if not getattr(payload, 'company_id', None):
raise ValueError('Case where no default main company is setup '
'not handled yet')
company = payload.company_id
company.write({
'name':payload.name,
'rml_header1':payload.rml_header1,
'rml_footer1':payload.rml_footer1,
'rml_footer2':payload.rml_footer2,
'logo':payload.logo,
})
company.partner_id.write({
'name':payload.name,
})
address_data = {
'name':payload.name,
'street':payload.street,
'street2':payload.street2,
'zip':payload.zip,
'city':payload.city,
'email':payload.email,
'phone':payload.phone,
'country_id':int(payload.country_id),
'state_id':int(payload.state_id),
}
if company.partner_id.address:
company.partner_id.address[0].write(
address_data)
else:
self.pool.get('res.partner.address').create(cr, uid,
dict(address_data,
partner_id=int(company.partner_id)),
context=context)
base_setup_company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,416 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import wizard
import pooler
import time
import tools
import os
view_form_profit = """<?xml version="1.0"?>
<form string="Setup">
<image name="gtk-dialog-info"/>
<group>
<separator string="Select a Profile" colspan="2"/>
<newline/>
<field align="0.0" name="profile"/>
<newline/>
<label string="A profile sets a pre-selection of modules for specific needs. These profiles have been setup to help you discover the different aspects of OpenERP. This is just an overview, we have 300+ available modules." colspan="2" align="0.0"/>
<newline/>
<label string="You'll be able to install more modules later through the Administration menu." colspan="2" align="0.0"/>
</group>
</form>"""
view_form_company = """<?xml version="1.0"?>
<form string="Setup">
<notebook colspan="4">
<page string="General Information">
<image name="gtk-dialog-info" colspan="2"/>
<group>
<separator string="Define Main Company" colspan="4"/>
<newline/>
<field name="name" align="0.0" colspan="4" required="True"/>
<newline/>
<field name="street" align="0.0"/>
<field name="street2" align="0.0"/>
<field name="zip" align="0.0"/>
<field name="city" align="0.0"/>
<field name="country_id" align="0.0"/>
<field name="state_id" align="0.0"/>
<field name="email" align="0.0"/>
<field name="phone" align="0.0"/>
<field name="currency" align="0.0"/>
</group>
</page>
<page string="Report Information">
<separator string="Report header" colspan="4"/>
<newline/>
<field name="rml_header1" align="0.0" colspan="4"/>
<field name="rml_footer1" align="0.0" colspan="4"/>
<field name="rml_footer2" align="0.0" colspan="4"/>
<separator colspan="4" string="Your Logo - Use a size of about 450x150 pixels."/>
<field colspan="4" name="logo" widget="image"/>
</page>
</notebook>
</form>"""
view_form_update = """<?xml version="1.0"?>
<form string="Setup">
<image name="gtk-dialog-info" colspan="2"/>
<group>
<separator string="Summary" colspan="2"/>
<newline/>
<field name="profile" align="0.0" readonly="1"/>
<newline/>
<field name="name" align="0.0" readonly="1"/>
</group>
</form>
"""
view_form_finish = """<?xml version="1.0"?>
<form string="Setup">
<image name="gtk-dialog-info" colspan="2"/>
<group colspan="2" col="4">
<separator colspan="4" string="Installation Done"/>
<label align="0.0" colspan="4" string="Your new database is now fully installed."/>
<label align="0.0" colspan="4" string="You can start configuring the system or connect directly to the database using the default setup."/>
</group>
</form>
"""
class wizard_base_setup(wizard.interface):
def _get_profiles(self, cr, uid, context):
module_obj=pooler.get_pool(cr.dbname).get('ir.module.module')
ids=module_obj.search(cr, uid, [('category_id', '=', 'Profile'),
('state', '<>', 'uninstallable')])
res=[(m.id, m.shortdesc) for m in module_obj.browse(cr, uid, ids, context=context)]
res.append((-1, 'Minimal Profile'))
res.sort()
return res
def _get_company(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
company_obj = pool.get('res.company')
ids=company_obj.search(cr, uid, [])
if not ids:
return {}
company = company_obj.browse(cr, uid, ids)[0]
res = {'currency': company.currency_id.id}
for field in 'name logo rml_header1 rml_footer1 rml_footer2'.split():
res[field] = company[field]
if company.partner_id.address:
address = company.partner_id.address[0]
for field in 'street street2 zip city email phone'.split():
res[field] = address[field]
for field in 'country_id state_id'.split():
if address[field]:
res[field] = address[field].id
serv_pro_id = pool.get('ir.module.module').search(cr, uid, [('name','=','profile_service')]) or False
if serv_pro_id:
res['profile'] = serv_pro_id[0]
return res
def _get_all(self, cr, uid, context, model):
pool = pooler.get_pool(cr.dbname)
obj = pool.get(model)
ids = obj.search(cr, uid, [])
res = [(o.id, o.name) for o in obj.browse(cr, uid, ids, context=context)]
res.append((-1, ''))
res.sort(key=lambda x: x[1])
return res
def _get_states(self, cr, uid, context):
return self._get_all(cr, uid, context, 'res.country.state')
def _get_countries(self, cr, uid, context):
return self._get_all(cr, uid, context, 'res.country')
def _get_currency(self, cr, uid, context):
return self._get_all(cr, uid, context, 'res.currency')
def _update(self, cr, uid, data, context):
pool=pooler.get_pool(cr.dbname)
form=data['form']
if 'profile' in data['form'] and data['form']['profile'] > 0:
module_obj=pool.get('ir.module.module')
module_obj.state_update(cr, uid, [data['form']['profile']], 'to install', ['uninstalled'], context)
company_obj=pool.get('res.company')
partner_obj=pool.get('res.partner')
address_obj=pool.get('res.partner.address')
ids=company_obj.search(cr, uid, [])
company=company_obj.browse(cr, uid, ids)[0]
company_obj.write(cr, uid, [company.id], {
'name': form['name'],
'rml_header1': form['rml_header1'],
'rml_footer1': form['rml_footer1'],
'rml_footer2': form['rml_footer2'],
'currency_id': form['currency'],
'logo': form['logo'],
})
partner_obj.write(cr, uid, [company.partner_id.id], {
'name': form['name'],
})
values={
'name': form['name'],
'street': form['street'],
'street2': form['street2'],
'zip': form['zip'],
'city': form['city'],
'email': form['email'],
'phone': form['phone'],
}
# we can do this, or set res.append((False, '')) in _get_all()
if form['country_id'] > 0:
values['country_id'] = form['country_id']
if form['state_id'] > 0:
values['state_id'] = form['state_id']
if company.partner_id.address:
address=company.partner_id.address[0]
address_obj.write(cr, uid, [address.id], values)
else:
values['partner_id']=company.partner_id.id
add_id=address_obj.create(cr, uid, values)
cr.commit()
(db, pool)=pooler.restart_pool(cr.dbname, update_module=True)
return {}
def _menu(self, cr, uid, data, context):
users_obj=pooler.get_pool(cr.dbname).get('res.users')
action_obj=pooler.get_pool(cr.dbname).get('ir.actions.act_window')
ids=action_obj.search(cr, uid, [('name', '=', 'Menu')])
menu=action_obj.browse(cr, uid, ids)[0]
ids=users_obj.search(cr, uid, [('action_id', '=', 'Setup')])
users_obj.write(cr, uid, ids, {'action_id': menu.id})
ids=users_obj.search(cr, uid, [('menu_id', '=', 'Setup')])
users_obj.write(cr, uid, ids, {'menu_id': menu.id})
return {
'name': menu.name,
'type': menu.type,
'view_id': (menu.view_id and\
(menu.view_id.id, menu.view_id.name)) or False,
'domain': menu.domain,
'res_model': menu.res_model,
'src_model': menu.src_model,
'view_type': menu.view_type,
'view_mode': menu.view_mode,
'views': menu.views,
}
def _next(self, cr, uid, data, context):
if not data['form']['profile'] or data['form']['profile'] <= 0:
return 'company'
return 'charts'
def _previous(self, cr, uid, data, context):
if 'profile' not in data['form'] or data['form']['profile'] <= 0:
return 'init'
return 'charts'
def _config(self, cr, uid, data, context=None):
pool = pooler.get_pool(cr.dbname)
users_obj=pool.get('res.users')
action_obj=pool.get('ir.actions.act_window')
ids=action_obj.search(cr, uid, [('name', '=', 'Menu')])
menu=action_obj.browse(cr, uid, ids)[0]
ids=users_obj.search(cr, uid, [('action_id', '=', 'Setup')])
users_obj.write(cr, uid, ids, {'action_id': menu.id})
ids=users_obj.search(cr, uid, [('menu_id', '=', 'Setup')])
users_obj.write(cr, uid, ids, {'menu_id': menu.id})
return pool.get('res.config').next(cr, uid, [], context=context)
fields={
'profile':{
'string':'Profile',
'type':'selection',
'selection':_get_profiles,
'required': True,
},
'name':{
'string': 'Company Name',
'type': 'char',
'size': 64,
},
'street':{
'string': 'Street',
'type': 'char',
'size': 128,
},
'street2':{
'string': 'Street2',
'type': 'char',
'size': 128,
},
'zip':{
'string': 'Zip code',
'type': 'char',
'size': 24,
},
'city':{
'string': 'City',
'type': 'char',
'size': 128,
},
'state_id':{
'string': 'State',
'type': 'selection',
'selection':_get_states,
},
'country_id':{
'string': 'Country',
'type': 'selection',
'selection':_get_countries,
},
'email':{
'string': 'E-mail',
'type': 'char',
'size': 64,
},
'phone':{
'string': 'Phone',
'type': 'char',
'size': 64,
},
'currency': {
'string': 'Currency',
'type': 'selection',
'selection':_get_currency,
'required': True,
},
'rml_header1':{
'string': 'Report Header',
'type': 'char',
'help': """This sentence will appear at the top right corner of your reports.
We suggest you to put a slogan here:
"Open Source Business Solutions".""",
'size': 200,
},
'rml_footer1':{
'string': 'Report Footer 1',
'type': 'char',
'help': """This sentence will appear at the bottom of your reports.
We suggest you to write legal sentences here:
Web: http://openerp.com - Fax: +32.81.73.35.01 - Fortis Bank: 126-2013269-07""",
'size': 200,
},
'rml_footer2':{
'string': 'Report Footer 2',
'help': """This sentence will appear at the bottom of your reports.
We suggest you to put bank information here:
IBAN: BE74 1262 0121 6907 - SWIFT: CPDF BE71 - VAT: BE0477.472.701""",
'type': 'char',
'size': 200,
},
'logo':{
'string': 'Logo',
'type': 'binary',
},
}
states={
'init':{
'actions': [_get_company],
'result': {'type': 'form', 'arch': view_form_profit, 'fields': fields,
'state': [
('menu', 'Cancel', 'gtk-cancel'),
('company', 'Next', 'gtk-go-forward', True)
]
}
},
# 'next': {
# 'actions': [],
# 'result': {'type': 'choice', 'next_state': _next}
# },
# 'charts':{
# 'actions': [],
# 'result': {'type': 'form', 'arch': view_form_charts, 'fields': fields,
# 'state':[
# ('init', 'Previous', 'gtk-go-back'),
# ('company', 'Next', 'gtk-go-forward', True)
# ]
# }
# },
'company':{
'actions': [],
'result': {'type': 'form', 'arch': view_form_company, 'fields': fields,
'state': [
('init', 'Previous', 'gtk-go-back'),
('update', 'Next', 'gtk-go-forward', True)
]
}
},
# 'previous':{
# 'actions': [],
# 'result': {'type': 'choice', 'next_state': _previous}
# },
'update':{
'actions': [],
'result': {'type': 'form', 'arch': view_form_update, 'fields': fields,
'state': [
('company', 'Previous', 'gtk-go-back'),
('finish', 'Install', 'gtk-ok', True)
]
}
},
'finish':{
'actions': [_update],
'result': {'type': 'form', 'arch': view_form_finish, 'fields': {},
'state': [
('menu', 'Use Directly', 'gtk-ok'),
('config', 'Start Configuration', 'gtk-go-forward', True)
]
}
},
'config': {
'result': {
'type': 'action',
'action': _config,
'state': 'end',
},
},
'menu': {
'actions': [],
'result': {'type': 'action', 'action': _menu, 'state': 'end'}
},
}
wizard_base_setup('base_setup.base_setup')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -7,30 +7,30 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2008-11-21 16:19+0000\n"
"Last-Translator: Tugrulbey <Unknown>\n"
"PO-Revision-Date: 2010-02-07 02:18+0000\n"
"Last-Translator: Oktay Altunergil <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: 2009-12-16 05:20+0000\n"
"X-Launchpad-Export-Date: 2010-02-08 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
msgstr "Nesne adı x_ ile başlamalı ve özel karakterler içermemelidir!"
#. module: board
#: model:ir.model,name:board.model_board_board
msgid "board.board"
msgstr ""
msgstr "board.board"
#. module: board
#: field:board.note,user_id:0
msgid "Author"
msgstr "Yazar"
msgstr "Yazan"
#. module: board
#: model:ir.module.module,shortdesc:board.module_meta_information
@ -51,7 +51,7 @@ msgstr "Genişlik"
#. module: board
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "İşlem tanımlamasında geçersiz model adı."
#. module: board
#: field:board.board.line,name:0

View File

@ -36,7 +36,7 @@ This module implements a dashboard for project member that includes:
'project',
'report_timesheet',
'board',
'report_analytic_planning',
'project_planning',
'report_analytic_line',
'report_task',
'hr_timesheet_sheet',

View File

@ -64,7 +64,7 @@
<button colspan="4" icon="terp-partner" name="%(open_board_project)d" string="My tasks board" type="action"/>
<action colspan="4" name="%(report_analytic_planning.action_account_analytic_planning_stat_form)d" string="My Project's planning" domain="[('manager_id','=',uid),('planning_id.state','&lt;&gt;','cancel')]"/>
<action colspan="4" name="%(project_planning.action_account_analytic_planning_stat_form)d" string="My Project's planning" domain="[('manager_id','=',uid),('planning_id.state','&lt;&gt;','cancel')]"/>
<action colspan="4" name="%(action_project_pipeline_user)d" string="My user's pipeline"/>

View File

@ -7,25 +7,25 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-08 15:57+0000\n"
"Last-Translator: LucaSub <subluca@gmail.com>\n"
"PO-Revision-Date: 2010-02-05 08:57+0000\n"
"Last-Translator: Carlo Vettore <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: 2009-12-16 05:06+0000\n"
"X-Launchpad-Export-Date: 2010-02-06 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board_sale
#: model:ir.module.module,shortdesc:board_sale.module_meta_information
msgid "Dashboard for sales"
msgstr ""
msgstr "Cruscotto per le vendite"
#. module: board_sale
#: model:ir.actions.act_window,name:board_sale.open_board_sales_manager
#: model:ir.ui.menu,name:board_sale.menu_board_sales_manager
msgid "Sale Dashboard"
msgstr "Dashboard Vendite"
msgstr "Cruscotto Vendite"
#. module: board_sale
#: view:board.board:0
@ -40,7 +40,7 @@ msgstr "Dashboard Sales Manager"
#. module: board_sale
#: view:board.board:0
msgid "Cases of the month"
msgstr ""
msgstr "Casi del Mese"
#. module: board_sale
#: constraint:ir.ui.view:0
@ -55,7 +55,7 @@ msgstr "Le Mie Domande Aperte"
#. module: board_sale
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Nome del modulo non valido nella definizione dell'azione."
#. module: board_sale
#: model:ir.ui.menu,name:board_sale.next_id_88

View File

@ -351,7 +351,7 @@ class base_action_rule_line(osv.osv):
('date','Date'),
], 'Trigger Date', size=16),
}
base_action_rule_line()
def _links_get(self, cr, uid, context={}):
@ -551,24 +551,21 @@ class crm_case(osv.osv):
return self.remind_user(cr, uid, ids, context, attach,
destination=False)
def remind_user(self, cr, uid, ids, context={}, attach=False,
def remind_user(self, cr, uid, ids, context={}, attach=False,
destination=True):
for case in self.browse(cr, uid, ids):
if not case.section_id.reply_to:
raise osv.except_osv(_('Error!'),("Reply To is not specified in Section"))
raise osv.except_osv(_('Error!'), ("Reply To is not specified in Section"))
if not case.email_from:
raise osv.except_osv(_('Error!'),("Partner Email is not specified in Case"))
raise osv.except_osv(_('Error!'), ("Partner Email is not specified in Case"))
if case.section_id.reply_to and case.email_from:
src = case.email_from
if not src:
raise osv.except_osv(_('Error!'),
_("No E-Mail ID Found for the Responsible Partner or missing reply address in section!"))
dest = case.section_id.reply_to
body = case.email_last or case.description
if not destination:
src,dest = dest,src
src, dest = dest, src
if case.user_id.signature:
body += '\n\n%s' % (case.user_id.signature)
body += '\n\n%s' % (case.user_id.signature or '')
dest = [dest]
attach_to_send = None

View File

@ -10,7 +10,6 @@
<field name="view_type">form</field>
<field name="view_mode">tree,calendar,form,graph</field>
<field name="view_id" ref="crm_case_claims_tree_view"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_claims_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">

View File

@ -175,9 +175,9 @@
<field name="arch" type="xml">
<search string="Search Claims">
<group col="4" colspan="1">
<filter icon="gtk-new" string="New Claims"
domain="[('state','=','draft')]"
separator="1" help="New Claims"
<filter icon="gtk-new" string="Current Claims"
domain="[('state','in',('draft', 'open'))]"
separator="1" help="Current Claims" default="1"
/>
<filter icon="gtk-execute"
string="In Progress Claims"

View File

@ -8,7 +8,6 @@
<field name="res_model">crm.fundraising</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_id" ref="crm.crm_case_tree_view_fund"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_fund_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_fund_all1">

View File

@ -186,7 +186,7 @@
help="Funds Related to Current User"
/>
<field name="state" select="1">
<filter icon="gtk-new" domain="[('state','=','draft')]" help="Draft Funds"/>
<filter icon="gtk-new" domain="[('state','in',('draft', 'open'))]" help="Current Funds" default="1"/>
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Funds"/>
<filter icon="gtk-media-pause" domain="[('state','=','pending')]" help="Pending Funds"/>
</field>

View File

@ -9,7 +9,6 @@
<field name="res_model">crm.helpdesk</field>
<field name="view_mode">tree,calendar,form</field>
<field name="view_id" ref="crm_case_tree_view_helpdesk"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_helpdesk_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_sec_tree_view_act111">

View File

@ -162,7 +162,7 @@
<group col="6" colspan="1">
<filter icon="gtk-home" string="Today"
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
help="Todays's Helpdesk Requests"
/>
<filter icon="gtk-media-rewind"
@ -178,7 +178,7 @@
<filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Helpdesk Requests" default="1"/>
</field>
<field name="state" select="1">
<filter icon="gtk-index" domain="[('state','in',('open','draft' ))]" help="Current "/>
<filter icon="gtk-index" domain="[('state','in',('open','draft' ))]" help="Current " default="1"/>
</field>
<field name="section_id" select="1" widget="selection" string="Section">
<filter icon="terp-crm"

View File

@ -49,11 +49,11 @@ class crm_lead(osv.osv):
" With each commercial opportunity, you can indicate the canall which is this opportunity source."),
'planned_revenue': fields.float('Planned Revenue'),
'planned_cost': fields.float('Planned Costs'),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]"),
'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]"),
'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \
"the partner mentality in relation to our services.The scale has" \
"to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
'opportunity_id': fields.many2one ('crm.opportunity', 'Opportunity'),
'opportunity_id': fields.many2one('crm.opportunity', 'Opportunity'),
}
crm_lead()

View File

@ -57,7 +57,7 @@
<separator colspan="4" string="Status and Categarization"/>
<group colspan="4" col="6">
<field name="user_id" select="2"/>
<field name="stage_id" select="1" string="Status" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="stage_id" select="1" string="Status" widget="selection" domain="[('object_id.model', '=', 'crm.lead')]"/>
<field name="categ_id" select="1" on_change="onchange_categ_id(categ_id)" string="Lead Source" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
<field name="type_id" string="Campaign" select="1"/>
@ -159,7 +159,7 @@
<group col="3" colspan="1">
<filter icon="gtk-home" string=" Today "
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
help="Todays's Leads"
/>
<filter icon="gtk-media-rewind" string=" 7 Days "
@ -177,7 +177,7 @@
/>
</field>
<field name="state" select="1">
<filter icon="gtk-new" domain="[('state','in',('draft', 'open'))]" help="Current Leads"/>
<filter icon="gtk-new" domain="[('state','in',('draft', 'open'))]" help="Current Leads" default="1"/>
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Leads"/>
</field>
<field name="section_id" select="1" default="context.get('section_id', False)" widget="selection" string="Section">

View File

@ -13,7 +13,7 @@
<record model="ir.actions.act_window" id="crm_case_categ_meet_create_partner">
<field name="context" eval="{'default_state':'open'}"/>
<field name="context" eval="{'default_state':'draft'}"/>
</record>
@ -52,7 +52,7 @@
/>
<record model="ir.actions.act_window" id="crm_case_categ_meet_case">
<field name="context" eval="{'default_state':'open'}"/>
<field name="context" eval="{'default_state':'draft'}"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_meet_case">
@ -84,7 +84,6 @@
<field name="res_model">crm.meeting</field>
<field name="view_mode">calendar,tree,form,gantt</field>
<field name="view_id" ref="crm_case_calendar_view_meet"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_meetings_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_meet">
@ -142,7 +141,6 @@
<field name="view_mode">tree,calendar,form,gantt</field>
<field name="view_id" ref="crm_case_calendar_view_meet"/>
<field name="domain" eval="[('state','in',('pending','draft','open')),('date','>=',time.strftime('%Y-%m-%d'))]"/>
<field name="context" eval="{'default_state':'open'}"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_view_meetall3">
<field name="sequence" eval="2"/>

View File

@ -162,7 +162,7 @@
<search string="Search Meetings">
<group col="12" colspan="4">
<filter icon="terp-crm" string="My Meetings" domain="[('user_id','=',uid)]" help="My Meetings"/>
<filter icon="terp-crm" string="Draft" domain="[('state','=','draft')]" help="Draft Meetings"/>
<filter icon="terp-crm" string="Draft" domain="[('state','in',('draft', 'open'))]" default="1" help="Current Meetings"/>
<filter icon="terp-crm" string="Confirmed" domain="[('state','=','done')]" help="Confirmed Meetings"/>
<separator orientation="vertical"/>
<field name="name" select="1" string="Subject"/>

View File

@ -28,7 +28,6 @@
<field name="res_model">crm.opportunity</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_id" ref="crm_case_tree_view_oppor"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_oppor11">

View File

@ -190,7 +190,7 @@
<group col="3" colspan="1">
<filter icon="gtk-home" string=" Today "
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
help="Todays's Opportunities"
/>
<filter icon="gtk-media-rewind" string=" 7 Days "
@ -209,7 +209,7 @@
</field>
<field name="partner_id" select="1"/>
<field name="state" select="1">
<filter icon="gtk-index" domain="[('state','in',('open','draft'))]" help="Current "/>
<filter icon="gtk-index" domain="[('state','in',('open','draft'))]" help="Current " default="1"/>
</field>
<field name="section_id" default="context.get('section_id', False)" select="1" widget="selection" string="Section">
<filter icon="terp-crm"

View File

@ -49,7 +49,6 @@
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_phone_tree_view"/>
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone1'))+')]'"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_phone_incoming0">
@ -78,7 +77,6 @@
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_phone_tree_view"/>
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone2'))+')]'"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_phone_outgoing0">

View File

@ -17,7 +17,7 @@
<menuitem action="crm_phonecall_categ_action" id="menu_crm_case_phonecall-act" parent="crm.menu_crm_case_categ"/>
# ------------------------------------------------------
# Fund Stage
# Phonecall Stage
# ------------------------------------------------------
<record id="crm_phonecall_stage_act" model="ir.actions.act_window">
<field name="name">Phonecall Stages</field>
@ -77,28 +77,27 @@
<field name="model">crm.phonecall</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Claims">
<group colspan="4" col="7">
<form string="Phone Call">
<group colspan="4" col="4">
<field name="name" string="Subject"/>
<field name="section_id" colspan="1" widget="selection"/>
<field name="user_id" string="Assigned to" select="2"/>
<button string="Schedule a Meeting"
name="%(wizard_crm_phonecall_meeting_set)d" icon="gtk-redo" type="action" />
<newline/>
<field name="date" string="Planned Date"/>
<field name="duration"/>
<field name="opportunity_id" on_change="onchange_case_id(case_id, name, partner_id)"
context="{'default_name':name,'default_section_id':section_id,'default_user_id':user_id,'default_duration':duration,
'default_partner_id':partner_id,'default_partner_address_id':partner_address_id,'default_partner_phone':partner_phone,
'default_partner_mobile':partner_mobile,'default_categ_id':categ_id}"/>
<button string="Convert to Opportunity" name="%(wizard_crm_phonecall_opportunity_set)d" icon="gtk-index" type="action" attrs="{'invisible':[('opportunity_id','!=',False)]}" />
</group>
'default_partner_mobile':partner_mobile,'default_categ_id':categ_id}"/>
<newline/>
<group col="5" colspan="4">
<label string="" colspan="2"/>
<button string="Schedule a Meeting"
name="%(wizard_crm_phonecall_meeting_set)d" icon="gtk-redo" type="action" />
<button string="Convert to Opportunity" name="%(wizard_crm_phonecall_opportunity_set)d" icon="gtk-index" type="action" attrs="{'invisible':[('opportunity_id','!=',False)]}" />
</group>
<notebook colspan="4">
<page string="General">
<field name="categ_id" string="Direction" select="1" on_change="onchange_categ_id(categ_id)" required="1"/>
<field name="categ_id" string="Direction" select="1" on_change="onchange_categ_id(categ_id)" required="1" readonly="1"/>
<field name="active" string="Reminder"/>
<group colspan="2" col="3">
<field name="partner_id" string="Partner"/>
@ -123,6 +122,7 @@
</group>
</page>
</notebook>
</group>
</form>
</field>
</record>
@ -150,7 +150,7 @@
<group col="6" colspan="1">
<filter icon="gtk-home" string=" Today "
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
domain="[('date::date','=',time.strftime('%%Y-%%m-%%d'))]"
help="Todays's Phonecalls"
/>
<filter icon="gtk-media-rewind"
@ -166,7 +166,7 @@
<filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Phonecalls" default="1"/>
</field>
<field name="state" select="1">
<filter icon="gtk-index" domain="[('state','in',('open','draft' ))]" help="Current "/>
<filter icon="gtk-index" domain="[('state','in',('open','draft' ))]" help="Current " default="1"/>
</field>
<field name="section_id" default="context.get('section_id', False)" select="1" widget="selection" string="Section">
<filter icon="terp-crm"
@ -178,6 +178,5 @@
</field>
</record>
</data>
</openerp>

View File

@ -372,7 +372,7 @@
default="1" help="Cases Related to Current User"
/>
<field name="state" select="1">
<filter icon="gtk-new" domain="[('state','=','draft')]" help="Draft Cases"/>
<filter icon="gtk-new" domain="[('state','in',('draft', 'open'))]" help="Current Cases"/>
<filter icon="gtk-yes" domain="[('state','=','open')]" help="Open Cases"/>
<filter icon="gtk-media-pause" domain="[('state','=','pending')]" help="Pending Cases"/>
</field>
@ -501,24 +501,12 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partner Segmentation">
<field name="name" select="1"/>
<field name="exclusif"/>
<group col="6" colspan="4">
<field name="name" select="1"/>
<field name="categ_id" select="2"/>
<field name="exclusif"/>
</group>
<notebook colspan="4">
<page string="Segmentation">
<separator colspan="4" string="Segmentation Description"/>
<field name="name" select="1"/>
<field name="exclusif"/>
<newline/>
<field colspan="2" name="categ_id" select="2"/>
<newline/>
<field colspan="4" name="description" select="2"/>
<field name="state"/>
<group col="3" colspan="2">
<button name="process_start" states="not running" string="Compute Segmentation" type="object" icon="gtk-execute"/>
<button name="process_stop" states="running" string="Stop Process" type="object" icon="gtk-cancel"/>
<button name="process_continue" states="running" string="Continue Process" type="object" icon="gtk-go-forward"/>
</group>
</page>
<page string="Sales Purchase">
<field name="sales_purchase_active"/>
<separator colspan="4" string="State of Mind Computation"/>
@ -527,9 +515,18 @@
<field name="som_interval_decrease"/>
<field name="som_interval_default"/>
<separator colspan="4" string="Segmentation Test"/>
<field colspan="4" name="segmentation_line" widget="one2many_list"/>
<field colspan="4" name="segmentation_line" widget="one2many_list" nolabel="1"/>
</page>
<page string="Description">
<field colspan="4" name="description" select="2" nolabel="1"/>
</page>
</notebook>
<field name="state"/>
<group col="3" colspan="2">
<button name="process_start" states="not running" string="Compute Segmentation" type="object" icon="gtk-execute"/>
<button name="process_stop" states="running" string="Stop Process" type="object" icon="gtk-cancel"/>
<button name="process_continue" states="running" string="Continue Process" type="object" icon="gtk-go-forward"/>
</group>
</form>
</field>
</record>

View File

@ -106,7 +106,6 @@ class lead2opportunity(wizard.interface):
lead_case_obj = pool.get('crm.lead')
opportunity_case_obj = pool.get('crm.opportunity')
for lead in lead_case_obj.browse(cr, uid, data['ids']):
#TODO : Take other info from lead
new_opportunity_id = opportunity_case_obj.create(cr, uid, {
'name': data['form']['name'],
'planned_revenue': data['form']['planned_revenue'],
@ -116,9 +115,12 @@ class lead2opportunity(wizard.interface):
'description':lead.description,
'date_deadline': lead.date_deadline,
'partner_address_id':lead.partner_address_id.id,
'priority':lead.priority,
'categ_id':lead.categ_id.id,
'priority': lead.priority,
'date': lead.date,
'partner_phone': lead.partner_phone,
'canal_id': lead.canal_id,
'som': lead.som,
'email_from': lead.email_from
})
new_opportunity = opportunity_case_obj.browse(cr, uid, new_opportunity_id)

View File

@ -98,7 +98,7 @@ class opportunity2phonecall(wizard.interface):
'section_id' : form['section_id'],
'partner_id': opportunity.partner_id.id,
'partner_address_id':opportunity.partner_address_id.id,
'description':opportunity.description,
'description': data['form']['note'] or opportunity.description,
'opportunity_id':opportunity.id
}, context=context)
vals = {}

View File

@ -101,6 +101,7 @@ def _mass_mail_send(self, cr, uid, data, context):
elif data['form']['state'] == 'pending':
case_pool.case_pending(cr, uid, data['ids'])
cr.commit()
raise wizard.except_wizard(_('Email!'),("Email Successfully Sent"))
else:
raise wizard.except_wizard(_('Warning!'),_("Email not sent !"))
return {}

View File

@ -9,7 +9,6 @@
<field name="res_model">crm.job</field>
<field name="view_mode">tree,calendar,form,graph</field>
<field name="view_id" ref="crm_case_tree_view_job"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
</record>

View File

@ -14,7 +14,6 @@
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_tree_view"/>
<field name="domain" eval="[('categ_id','=',ref('bug_categ'))]"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_bugs_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view0">

View File

@ -12,7 +12,6 @@
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_tree_view"/>
<field name="domain" eval="[('categ_id','=',ref('feature_request_categ'))]"/>
<field name="context" eval="{'default_state':'open'}"/>
<field name="search_view_id" ref="view_crm_case_bugs_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_future_tree_view0">

View File

@ -1,5 +1,5 @@
<openerp>
<data>
<data>
<record model="ir.actions.url" id="action_document_browse">
<field name="name">Browse Files</field>
<field name="url">ftp://localhost:8021/</field>
@ -21,17 +21,16 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Auto Configure
</attribute></form>
<form position="attributes">
<attribute name="string">Auto Configure</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="FTP Server Configuration." colspan="4"/>
<label align="0.0" colspan="4"
string="Choose the address and port for the Document
Management System's FTP server."/>
string="Choose the address for the Document Management System's FTP server."/>
<field name="host"/>
</group>
<xpath expr='//button[@name="action_skip"]' position="replace"/>
<xpath expr="//button[@name='action_skip']" position="replace"/>
</data>
</field>
</record>
@ -51,4 +50,3 @@
</record>
</data>
</openerp>

View File

@ -8,13 +8,12 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Configure Calendars for CRM Sections
</attribute></form>
<form position="attributes">
<attribute name="string">Configure Calendars for CRM Sections</attribute>
</form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
OpenERP can create and pre-configure a series of integrated
calendar for you."/>
<label colspan="4" align="0.0"
string="OpenERP can create and pre-configure a series of integrated calendar for you."/>
<separator string="Create Pre-Configured Calendars"
colspan="4"/>
<newline/>

View File

@ -4,45 +4,30 @@
<field name="name">hr.installer.view</field>
<field name="model">hr.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Human Resources Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Human Resources Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Configure Human Resources" colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Human Resources Management" colspan="4"/>
<field name="hr_holidays"/>
<field name="hr_expense"/>
<field name="hr_jobs"/>
<field name="hr_timesheet_sheet"/>
<field name="hr_contract"/>
<field name="hr_evaluation"/>
<field name="hr_attendance"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string">Configure Human Resources"</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">The base Human Resources addon will help you manage your employee roster, but your can enhance it even further by installing a few HR-related applications.</attribute>
</xpath>
<group colspan="8">
<separator string="Human Resources Management" colspan="4"/>
<field name="hr_holidays"/>
<field name="hr_expense"/>
<field name="crm_hr"/>
<field name="hr_timesheet_sheet"/>
<field name="hr_contract"/>
<field name="hr_evaluation"/>
<field name="hr_attendance"/>
</group>
</data>
</field>
</record>
@ -59,7 +44,7 @@
<record id="hr_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_hr_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -26,13 +26,27 @@ class hr_installer(osv.osv_memory):
_columns = {
# Human Resources Management
'hr_holidays':fields.boolean('Holidays / Leaves Management'),
'hr_expense':fields.boolean('Expenses'),
'hr_jobs':fields.boolean('Recruitement Process'),
'hr_timesheet_sheet':fields.boolean('Timesheets'),
'hr_contract':fields.boolean("Employee's Contracts"),
'hr_evaluation':fields.boolean('Periodic Evaluations'),
'hr_attendance':fields.boolean('Attendances (Sign In/Out)'),
'hr_holidays':fields.boolean('Holidays / Leaves Management',
help="Tracks employee leaves allocations, requests and planning."
"\n\nCan also plug into OpenERP's agendas and calendars "
"applications in order to display accepted leaves requests on"
" OpenERP's calendars."),
'hr_expense':fields.boolean('Expenses',
help="Tracks and manages employee expenses, and can "
"automatically re-invoice clients if the expenses are "
"project-related."),
'crm_hr':fields.boolean('Recruitment Process',
help="Helps you manage and streamline your recruitment process."),
'hr_timesheet_sheet':fields.boolean('Timesheets',
help="Tracks and helps employees encode and validate timesheets "
"and attendance."),
'hr_contract':fields.boolean("Employee's Contracts",
help="Extends employee profiles to help manage their contracts."),
'hr_evaluation':fields.boolean('Periodic Evaluations',
help="Lets you create and manage the periodic evaluation and "
"performance review of employees."),
'hr_attendance':fields.boolean('Attendances (Sign In/Out)',
help="Simplifies the management of employee attendances."),
}
_defaults = {
'hr_holidays': True,

View File

@ -26,12 +26,25 @@ class knowledge_installer(osv.osv_memory):
_columns = {
# Knowledge Management
'document_ftp':fields.boolean('Shared Repositories (FTP)'),
'document_webdav':fields.boolean('Shared Repositories (WebDAV)'),
'wiki':fields.boolean('Collaborative Content (Wiki)'),
'document_ftp':fields.boolean('Shared Repositories (FTP)',
help="Provides an FTP access to your OpenERP's Document "
"Management System. Lets you access attachments and "
"virtual documents through a standard FTP client."),
'document_webdav':fields.boolean('Shared Repositories (WebDAV)',
help="Provides a WebDAV access to your OpenERP's Document "
"Management System. Lets you access attachments and "
"virtual documents through your standard file browser."),
'wiki':fields.boolean('Collaborative Content (Wiki)',
help="Lets you create wiki pages and page groups in order "
"to keep track of business knowledge and share it with "
"and between your employees."),
# Templates of Content
'wiki_faq':fields.boolean('Internal FAQ'),
'wiki_quality_manual':fields.boolean('Quality Manual'),
'wiki_faq':fields.boolean('Internal FAQ',
help="Creates a skeleton internal FAQ pre-filled with "
"documentation about OpenERP's Document Management "
"System."),
'wiki_quality_manual':fields.boolean('Quality Manual',
help="Creates an example skeleton for a standard quality manual."),
}
_defaults = {
'document_ftp':True,

View File

@ -4,45 +4,30 @@
<field name="name">knowledge.installer.view</field>
<field name="model">knowledge.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Knowledge Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Knowledge Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Configure Your Knowledge Management System"
colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Knowledge Management" colspan="4"/>
<field name="document_ftp"/>
<field name="document_webdav"/>
<field name="wiki"/>
<separator string="Templates of Content" colspan="4"/>
<field name="wiki_faq"/>
<field name="wiki_quality_manual"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string"
>Configure Your Knowledge Management System</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">From this screen, you can select various OpenERP applications which will help employees store information, distribute it and share it with one another.</attribute>
</xpath>
<group colspan="8">
<separator string="Knowledge Management" colspan="4"/>
<field name="document_ftp"/>
<field name="document_webdav"/>
<field name="wiki"/>
<separator string="Templates of Content" colspan="4"/>
<field name="wiki_faq"/>
<field name="wiki_quality_manual"/>
</group>
</data>
</field>
</record>
@ -59,7 +44,7 @@
<record id="knowledge_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_knowledge_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -7,13 +7,12 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Account Journal
</attribute></form>
<form position="attributes">
<attribute name="string">Account Journal</attribute>
</form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
Set accounts on financial journals defined by CamptoCamp
l10n_ch module"/>
<label colspan="4" align="0.0"
string="Set accounts on financial journals defined by CamptoCamp l10n_ch module"/>
<separator colspan="4"/>
<group colspan="4" col="6">
<field name="name" select="1"/>

View File

@ -14,13 +14,12 @@
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Account tax template
</attribute></form>
<form position="attributes">
<attribute name="string">Account tax template</attribute>
</form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
Set account on financial taxes defined by
Camptocamp l10n_ch_c2c_pcg module"/>
<label colspan="4" align="0.0"
string="Set account on financial taxes defined by Camptocamp l10n_ch_c2c_pcg module"/>
<group colspan="4" col="6">
<field name="name" select="1"/>
</group>
@ -47,4 +46,4 @@
<field name="sequence">5</field>
</record>
</data>
</openerp>
</openerp>

View File

@ -54,6 +54,22 @@ class mail_gateway_server(osv.osv):
'server_type':lambda * a:'pop',
'active':lambda * a:True,
}
def check_duplicate(self, cr, uid, ids):
vals = self.read(cr, uid, ids, ['name', 'login'])[0]
cr.execute("select count(id) from mail_gateway_server \
where name='%s' and login='%s'" % \
(vals['name'], vals['login']))
res = cr.fetchone()
if res:
if res[0] > 1:
return False
return True
_constraints = [
(check_duplicate, 'Warning! Can\'t have duplicate server configuration!', ['name', 'login'])
]
def onchange_server_type(self, cr, uid, ids, server_type=False, ssl=False):
port = 0
if server_type == 'pop':
@ -61,6 +77,7 @@ class mail_gateway_server(osv.osv):
elif server_type == 'imap':
port = ssl and 993 or 143
return {'value':{'port':port}}
mail_gateway_server()

View File

@ -1,6 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="mail_gateway_history_form" model="ir.ui.view">
<field name="name">mail.gateway.history.form</field>
<field name="model">mail.gateway.history</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Gateway History">
<field name="name"/>
<field name="res_id"/>
<separator string="Note" colspan="4"/>
<field name="note" nolabel="1" colspan="4"/>
</form>
</field>
</record>
<record id="mail_gateway_history_tree" model="ir.ui.view">
<field name="name">mail.gateway.history.tree</field>
<field name="model">mail.gateway.history</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Gateway History">
<field name="name" select="1"/>
<field name="res_id"/>
<field name="gateway_id"/>
</tree>
</field>
</record>
<record id="mail_gateway_act" model="ir.actions.act_window">
<field name="name">Gateway History</field>
<field name="res_model">mail.gateway.history</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="mail_gateway_history_tree"/>
</record>
<act_window context="{'gateway_id': active_id}"
domain="[('gateway_id', '=', active_id)]"
id="act_gateway_history" name="Email History"
res_model="mail.gateway.history" src_model="mail.gateway" />
<record id="mail_gateway_form" model="ir.ui.view">
<field name="name">mail.gateway.form</field>
<field name="model">mail.gateway</field>
@ -12,18 +53,6 @@
<field name="server_id" />
<field name="reply_to"/>
<field name="email_default" />
<field name="mail_history" widget="one2many_list" nolabel="1" colspan="4">
<tree string="Email History">
<field name="name"/>
<field name="res_id"/>
</tree>
<form string="Email History">
<field name="name"/>
<field name="res_id"/>
<separator colspan="4" string="Notes"/>
<field name="note" nolabel="1" colspan="4"/>
</form>
</field>
</form>
</field>
</record>

View File

@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-17 07:46+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-07 22:30+0000\n"
"Last-Translator: Selma <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: 2009-12-16 05:07+0000\n"
"X-Launchpad-Export-Date: 2010-02-08 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: membership
#: model:process.transition,name:membership.process_transition_invoicetoassociate0
msgid "invoice to associate"
msgstr ""
msgstr "Račun za saradnika"
#. module: membership
#: model:process.process,name:membership.process_process_membershipprocess0
@ -35,7 +35,7 @@ msgstr "Plaćeni član"
#. module: membership
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Neispravan naziv modela u definiciji zadatka."
#. module: membership
#: field:report.partner_member.year,currency:0
@ -61,7 +61,7 @@ msgstr "Definiraj članski proizvod"
#. module: membership
#: field:product.product,membership_date_to:0
msgid "Date to"
msgstr ""
msgstr "Datum do"
#. module: membership
#: model:process.transition,name:membership.process_transition_waitingtoinvoice0
@ -71,7 +71,7 @@ msgstr "Čekanje za fakturiranje"
#. module: membership
#: model:process.transition,name:membership.process_transition_producttomember0
msgid "Product to member"
msgstr ""
msgstr "Proizvod za člana"
#. module: membership
#: field:res.partner,associate_member:0
@ -101,7 +101,7 @@ msgstr ""
#. module: membership
#: field:product.product,membership_date_from:0
msgid "Date from"
msgstr ""
msgstr "Datum od"
#. module: membership
#: field:membership.membership_line,partner:0
@ -117,7 +117,7 @@ msgstr "Slobodni članovi"
#. module: membership
#: model:process.transition,name:membership.process_transition_invoicetopaid0
msgid "Invoice to paid"
msgstr ""
msgstr "Račun za platiti"
#. module: membership
#: view:res.partner:0
@ -162,7 +162,7 @@ msgstr "Stanje"
#. module: membership
#: field:res.partner,membership_start:0
msgid "Start membership date"
msgstr ""
msgstr "Datum učlanjenja"
#. module: membership
#: model:process.node,name:membership.process_node_paidmember0
@ -174,7 +174,7 @@ msgstr "Plaćeni član"
#: model:ir.ui.menu,name:membership.menu_report_partner_member_year
#: view:report.partner_member.year:0
msgid "Membership by Years"
msgstr ""
msgstr "Članstvo po godinama"
#. module: membership
#: model:ir.ui.menu,name:membership.menu_reporting
@ -190,7 +190,7 @@ msgstr "Članovi"
#: selection:membership.membership_line,state:0
#: selection:res.partner,membership_state:0
msgid "Non Member"
msgstr ""
msgstr "Nije član"
#. module: membership
#: model:process.node,note:membership.process_node_invoicedmember0
@ -205,7 +205,7 @@ msgstr "Konfiguracija"
#. module: membership
#: model:process.transition,note:membership.process_transition_producttomember0
msgid "Define product for membership."
msgstr ""
msgstr "Definiraj proizvod za članstvo"
#. module: membership
#: model:process.transition,note:membership.process_transition_invoicetoassociate0
@ -226,7 +226,7 @@ msgstr ""
#. module: membership
#: model:ir.ui.menu,name:membership.menu_members_waiting
msgid "Future members (invoice not confirmed)"
msgstr ""
msgstr "Budući članovi (račun nije potvrđen)"
#. module: membership
#: model:process.node,name:membership.process_node_setassociation0
@ -254,7 +254,7 @@ msgstr "Poništeno"
#. module: membership
#: model:product.pricelist,name:membership.list1m
msgid "Member Sale Pricelist"
msgstr ""
msgstr "Članski cjenovnik"
#. module: membership
#: field:report.partner_member.year,invoiced_amount:0
@ -284,7 +284,7 @@ msgstr ""
#. module: membership
#: help:res.partner,membership_amount:0
msgid "The price negociated by the partner"
msgstr ""
msgstr "Cijena ugovorena sa partnerom"
#. module: membership
#: model:process.node,name:membership.process_node_associatedmember0
@ -299,17 +299,17 @@ msgstr ""
#. module: membership
#: field:res.partner,membership_cancel:0
msgid "Cancel membership date"
msgstr ""
msgstr "Otkaži datum članstva"
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_products
msgid "Membership Products"
msgstr ""
msgstr "Proizvodi članstva"
#. module: membership
#: model:process.node,note:membership.process_node_paidmember0
msgid "Membership invoice paid."
msgstr ""
msgstr "Račun za članstvo je uplaćen."
#. module: membership
#: field:report.partner_member.year,paid_amount:0
@ -323,7 +323,7 @@ msgstr "Plaćeno"
#: selection:membership.membership_line,state:0
#: selection:res.partner,membership_state:0
msgid "Invoiced Member"
msgstr ""
msgstr "Fakturisani član"
#. module: membership
#: model:ir.module.module,shortdesc:membership.module_meta_information
@ -344,7 +344,7 @@ msgstr ""
#: selection:membership.membership_line,state:0
#: selection:res.partner,membership_state:0
msgid "Waiting Member"
msgstr ""
msgstr "Član na čekanju"
#. module: membership
#: model:process.transition,name:membership.process_transition_associationpartner0
@ -360,7 +360,7 @@ msgstr "Fakturisani članovi"
#. module: membership
#: constraint:product.pricelist.version:0
msgid "You cannot have 2 pricelist versions that overlap!"
msgstr ""
msgstr "Nije moguće imati dva cjenovnika koja se preklapaju!"
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_members_old
@ -376,7 +376,7 @@ msgstr "Iznos članarine"
#. module: membership
#: wizard_view:wizard_invoice_membership,init:0
msgid "Choose invoice details"
msgstr ""
msgstr "Odaberite detalje računa"
#. module: membership
#: selection:membership.membership_line,state:0
@ -387,7 +387,7 @@ msgstr "Stari Član"
#. module: membership
#: field:membership.membership_line,date_to:0
msgid "To"
msgstr ""
msgstr "Za"
#. module: membership
#: field:report.partner_member.year,waiting_amount:0
@ -400,7 +400,7 @@ msgstr "Čekanje"
#. module: membership
#: model:process.transition,note:membership.process_transition_waitingtoinvoice0
msgid "Draft invoice is now open."
msgstr ""
msgstr "Nacrt računa je otvoren."
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_members_waiting
@ -444,13 +444,13 @@ msgstr ""
#. module: membership
#: model:process.node,note:membership.process_node_waitingmember0
msgid "Draft invoice for membership."
msgstr ""
msgstr "Nacrt računa za članstvo."
#. module: membership
#: selection:membership.membership_line,state:0
#: selection:res.partner,membership_state:0
msgid "Canceled Member"
msgstr ""
msgstr "Otkazani član"
#. module: membership
#: model:product.price.type,name:membership.product_price_type_memberprice
@ -461,12 +461,12 @@ msgstr ""
#. module: membership
#: field:res.partner,free_member:0
msgid "Free member"
msgstr ""
msgstr "Besplatni član"
#. module: membership
#: field:res.partner,membership_stop:0
msgid "Stop membership date"
msgstr ""
msgstr "Datum prestanka članstva"
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_members
@ -479,22 +479,22 @@ msgstr "Aktivni članovi"
#: model:ir.ui.menu,name:membership.menu_report_partner_member_year_new
#: view:report.partner_member.year_new:0
msgid "New Membership by Years"
msgstr ""
msgstr "Novo članstvo po godinama"
#. module: membership
#: model:process.node,name:membership.process_node_invoicedmember0
msgid "Invoiced member"
msgstr ""
msgstr "Fakturisani član"
#. module: membership
#: field:membership.membership_line,date_cancel:0
msgid "Cancel date"
msgstr ""
msgstr "Datum otkazivanja"
#. module: membership
#: model:process.node,name:membership.process_node_waitingmember0
msgid "Waiting member"
msgstr ""
msgstr "Član na čekanju"
#. module: membership
#: model:ir.actions.wizard,name:membership.wizard_invoice_membership
@ -505,12 +505,12 @@ msgstr ""
#: model:process.node,name:membership.process_node_membershipproduct0
#: wizard_field:wizard_invoice_membership,init,product:0
msgid "Membership product"
msgstr ""
msgstr "Proizvod članstva"
#. module: membership
#: constraint:product.product:0
msgid "Error: Invalid ean code"
msgstr ""
msgstr "Greška: nevažeći EAN kod"
#. module: membership
#: field:report.partner_member.year,year:0
@ -521,4 +521,4 @@ msgstr "Godina"
#. module: membership
#: field:res.partner,membership_state:0
msgid "Current membership state"
msgstr ""
msgstr "Trenutno stanje članstva"

View File

@ -4,42 +4,28 @@
<field name="name">misc_tools.installer.view</field>
<field name="model">misc_tools.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Tools Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Tools Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Select Tools To Install" colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Tools" colspan="4"/>
<field name="lunch"/>
<field name="subscription"/>
<field name="survey"/>
<field name="audittrail"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string">Select Tools To Install</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string"
>Here are a few useful applications which, while they don't directly contribute to your business, can improve on it or improve your OpenERP experience</attribute>
</xpath>
<group colspan="8">
<separator string="Tools" colspan="4"/>
<field name="lunch"/>
<field name="subscription"/>
<field name="survey"/>
<field name="audittrail"/>
</group>
</data>
</field>
</record>
@ -56,7 +42,7 @@
<record id="misc_tools_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_misc_tools_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -54,9 +54,6 @@
* Print a production order
* Stock forecasts
""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['stock', 'hr', 'purchase', 'product', 'process'],
'init_xml': [],
'update_xml': [
'security/mrp_security.xml',

View File

@ -26,10 +26,24 @@ class mrp_installer(osv.osv_memory):
_columns = {
# Manufacturing Resource Planning
'stock_location':fields.boolean('Advanced Routes'),
'mrp_jit':fields.boolean('Just In Time Scheduling'),
'mrp_operations':fields.boolean('Manufacturing Operations'),
'mrp_subproduct':fields.boolean('MRP Subproducts'),
'mrp_repair':fields.boolean('Repairs'),
'stock_location':fields.boolean('Advanced Routes',
help="Manages product routes and paths within and between "
"locations (e.g. warehouses)"),
'mrp_jit':fields.boolean('Just In Time Scheduling',
help="Enables Just In Time computation of procurement orders."
"\n\nWhile it's more resource intensive than the default "
"setup, the JIT computer avoids having to wait for the "
"procurement scheduler to run or having to run the "
"procurement scheduler manually."),
'mrp_operations':fields.boolean('Manufacturing Operations',
help="Enhances production orders with readiness states as well "
"as the dates of start and end of execution of the order."),
'mrp_subproduct':fields.boolean('MRP Subproducts',
help="Enables multiple product output from a single production "
"order: without this, a productio order can have only one "
"output product."),
'mrp_repair':fields.boolean('Repairs',
help="Enables warranty and repair management (and their impact "
"on stocks and invoicing)."),
}
mrp_installer()

View File

@ -4,43 +4,28 @@
<field name="name">mrp.installer.view</field>
<field name="model">mrp.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
MRP Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">MRP Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Configure Your Manufacturing" colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Manufacturing Resource Planning" colspan="4"/>
<!-- Advanced Routes -->
<field name="mrp_jit"/>
<field name="mrp_operations"/>
<field name="mrp_subproduct"/>
<field name="mrp_repair"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string">Configure Your Manufacturing</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">After having installed the core manufacturing application, you can extend it with a few more depending on the needs of your organization</attribute>
</xpath>
<group colspan="8">
<separator string="Manufacturing Resource Planning" colspan="4"/>
<field name="stock_location"/>
<field name="mrp_jit"/>
<field name="mrp_operations"/>
<field name="mrp_subproduct"/>
<field name="mrp_repair"/>
</group>
</data>
</field>
</record>
@ -57,7 +42,7 @@
<record id="mrp_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_mrp_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -782,21 +782,13 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="context">{}</field>
</record>
<menuitem action="mrp_procurement_action3" id="menu_procurement_requisitions" parent="purchase.menu_procurement_management"
name="Requisitions" sequence="5" />
<record id="mrp_procurement_action_quotation" model="ir.actions.act_window">
<field name="name">Quotation Request</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','draft')]</field>
</record>
<menuitem action="mrp_procurement_action_quotation" id="menu_procurement_request_quotation" parent="purchase.menu_procurement_management"
name="Request for Quotations" sequence="6" />
name="Requisitions" sequence="5" />

View File

@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-08 16:23+0000\n"
"Last-Translator: Madalena_prime <madalena.barreto@prime.cv>\n"
"PO-Revision-Date: 2010-02-06 16:44+0000\n"
"Last-Translator: Paulino <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: 2009-12-16 05:26+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:38+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_jit
#: model:ir.module.module,shortdesc:mrp_jit.module_meta_information
msgid "MRP JIT"
msgstr ""
msgstr "MRP JIT"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-02-05 00:18+0000\n"
"PO-Revision-Date: 2010-02-06 20:43+0000\n"
"Last-Translator: Guilherme Santos <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: 2010-02-05 05:01+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:38+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_repair
@ -124,7 +124,7 @@ msgstr ""
#. module: mrp_repair
#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_tree
msgid "Repair Orders"
msgstr ""
msgstr "Ordens de Serviços"
#. module: mrp_repair
#: model:ir.actions.report.xml,name:mrp_repair.report_mrp_repair
@ -145,7 +145,7 @@ msgstr "Parceiro"
#: model:ir.actions.act_window,name:mrp_repair.action_repair_quotation_tree
#: model:ir.ui.menu,name:mrp_repair.menu_repair_quotation
msgid "Repairs in quotation"
msgstr ""
msgstr "Ordens de Serviços em Orçamento"
#. module: mrp_repair
#: selection:mrp.repair,state:0
@ -289,7 +289,7 @@ msgstr ""
#. module: mrp_repair
#: field:mrp.repair,repaired:0
msgid "Repaired"
msgstr ""
msgstr "Consertado"
#. module: mrp_repair
#: wizard_field:mrp.repair.make_invoice,init,group:0

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-16 16:28+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-05 09:05+0000\n"
"Last-Translator: Carlo Vettore <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: 2009-12-16 05:26+0000\n"
"X-Launchpad-Export-Date: 2010-02-06 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_subproduct
@ -32,17 +32,17 @@ msgstr ""
#. module: mrp_subproduct
#: view:mrp.bom:0
msgid "sub products"
msgstr ""
msgstr "Sotto Prodotti"
#. module: mrp_subproduct
#: field:mrp.subproduct,product_id:0
msgid "Product"
msgstr ""
msgstr "Prodotto"
#. module: mrp_subproduct
#: model:ir.model,name:mrp_subproduct.model_mrp_subproduct
msgid "Mrp Sub Product"
msgstr ""
msgstr "MRP Sotto Prodotti"
#. module: mrp_subproduct
#: field:mrp.subproduct,subproduct_type:0
@ -52,39 +52,39 @@ msgstr ""
#. module: mrp_subproduct
#: field:mrp.subproduct,product_qty:0
msgid "Product Qty"
msgstr ""
msgstr "Qtà Prodotto"
#. module: mrp_subproduct
#: field:mrp.subproduct,product_uom:0
msgid "Product UOM"
msgstr ""
msgstr "Unità di Misura del Prodotto"
#. module: mrp_subproduct
#: field:mrp.subproduct,bom_id:0
msgid "BoM"
msgstr ""
msgstr "Distinta base"
#. module: mrp_subproduct
#: view:mrp.bom:0
msgid "Sub Products"
msgstr ""
msgstr "Sotto prodotti"
#. module: mrp_subproduct
#: selection:mrp.subproduct,subproduct_type:0
msgid "Variable"
msgstr ""
msgstr "Variabile"
#. module: mrp_subproduct
#: field:mrp.bom,sub_products:0
msgid "sub_products"
msgstr ""
msgstr "sub_products"
#. module: mrp_subproduct
#: selection:mrp.subproduct,subproduct_type:0
msgid "Fixed"
msgstr ""
msgstr "Fissato"
#. module: mrp_subproduct
#: model:ir.module.module,shortdesc:mrp_subproduct.module_meta_information
msgid "MRP Sub Product"
msgstr ""
msgstr "MRP Sotto Prodotto"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-12-24 13:48+0000\n"
"Last-Translator: Hend Awad <Unknown>\n"
"PO-Revision-Date: 2010-02-06 15:59+0000\n"
"Last-Translator: omar <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: 2009-12-25 04:41+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:37+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product
@ -1644,7 +1644,7 @@ msgstr ""
#. module: product
#: model:product.category,name:product.cat2
msgid "Private"
msgstr ""
msgstr "خاص"
#. module: product
#: help:product.supplierinfo,delay:0

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,7 +15,7 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
@ -24,10 +24,9 @@ import pooler
class profile_accounting_config_install_modules_wizard(osv.osv_memory):
_name='profile.accounting.config.install_modules_wizard'
_inherit = 'res.config'
_inherit = 'res.config.installer'
_columns = {
'name':fields.char('Name', size=64),
'account_analytic_analysis':fields.boolean('Analytic Accounting'),
'account_analytic_plans':fields.boolean('Multiple Analytic Plans'),
'account_payment':fields.boolean('Suppliers Payment Management'),
@ -36,18 +35,6 @@ class profile_accounting_config_install_modules_wizard(osv.osv_memory):
'account_budget':fields.boolean('Budgets', help="Helps you to manage financial and analytic budgets."),
'board_document':fields.boolean('Document Management',help= "The Document Management System of Open ERP allows you to store, browse, automatically index, search and preview all kind of documents (internal documents, printed reports, calendar system). It opens an FTP access for the users to easily browse association's document."),
}
def execute(self, cr, uid, ids, context=None):
result = self.read(cr, uid, ids)
mod_obj = self.pool.get('ir.module.module')
for res in result:
for r in res:
if r != 'id' and res[r]:
ids += mod_obj.search(cr, uid, [('name', '=', r)])
mod_obj.button_install(cr, uid, ids, context=context)
cr.commit()
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
profile_accounting_config_install_modules_wizard()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,17 +5,19 @@
<field name="name">Accounting Profile : Install extra modules</field>
<field name="model">profile.accounting.config.install_modules_wizard</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Install Extra Modules
</attribute></form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
Install more modules. A few modules are proposed according
to the Account Profile you selected. You will be able to
install them based on our requirements."/>
<form position="attributes">
<attribute name="string">Install Extra Modules</attribute>
</form>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string"
>Install more modules. A few modules are proposed according to the Account Profile you selected. You will be able to install them based on our requirements.</attribute>
</xpath>
<separator string="title" position="replace"/>
<group colspan="8">
<separator string="Accounting Management" colspan="4"/>
<field name="account_analytic_analysis"/>
<field name="account_analytic_plans"/>
@ -44,6 +46,7 @@
<record model="ir.actions.todo"
id="profile_accounting.config_install_wizard">
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -25,7 +25,7 @@ import pooler
class profile_association_config_install_modules_wizard(osv.osv_memory):
_name='profile.association.config.install_modules_wizard'
_inherit = 'res.config'
_inherit = 'res.config.installer'
_columns = {
'hr_expense':fields.boolean('Expenses Tracking', help="Tracks the personal expenses process, from the employee expense encoding, to the reimbursement of the employee up to the reinvoicing to the final customer."),
@ -38,15 +38,5 @@ class profile_association_config_install_modules_wizard(osv.osv_memory):
'wiki': fields.boolean('Wiki',
help="An integrated wiki content management system. This is really usefull to manage FAQ, quality manuals, etc.")
}
def execute(self, cr, uid, ids, context=None):
result = self.read(cr,uid,ids)
mod_obj = self.pool.get('ir.module.module')
for res in result:
for r in res:
if r != 'id' and res[r]:
ids = mod_obj.search(cr, uid, [('name', '=', r)])
mod_obj.button_install(cr, uid, ids, context=context)
cr.commit()
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
profile_association_config_install_modules_wizard()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,17 +5,18 @@
<field name="name">Association Profile : Install extra modules</field>
<field name="model">profile.association.config.install_modules_wizard</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Install Extra Modules
</attribute></form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
Install more modules. A few modules are proposed according
to the Account Profile you selected. You will be able to
install them based on our requirements."/>
<form position="attributes">
<attribute name="string">Install Extra Modules</attribute>
</form>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">Install more modules. A few modules are proposed according to the Association Profile you selected. You will be able to install them based on our requirements.</attribute>
</xpath>
<separator string="title" position="replace"/>
<group colspan="8">
<separator string="Project Management" colspan="4"/>
<field name="project"/>
<field name="project_gtd"/>
@ -41,7 +42,8 @@
<record model="ir.actions.todo"
id="config_install_module">
<field name="action_id" ref="action_config_install_module"/>
</record>
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -7,28 +7,15 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-17 10:58+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-05 18:41+0000\n"
"Last-Translator: Numérigraphe <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: 2009-12-16 05:20+0000\n"
"X-Launchpad-Export-Date: 2010-02-06 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: profile_manufacturing
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères "
"spéciaux !"
#. module: profile_manufacturing
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valide pour l'architecture de la vue"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_operation:0
msgid "Manufacturing Operations"
@ -39,6 +26,14 @@ msgstr "Opérations de fabrication"
msgid "Profile for manufacturing industries"
msgstr "Profil pour les industries manufacturières"
#. module: profile_manufacturing
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de "
"caractères spéciaux !"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_jit:0
msgid "Just in Time Scheduling"
@ -144,6 +139,11 @@ msgstr ""
"Permet de gérer les réparations de produits. Tient compte des date de fin de "
"garantie, et permet la facturation des produits et services."
#. module: profile_manufacturing
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valide pour l'architecture de la vue !"
#. module: profile_manufacturing
#: model:ir.actions.todo,note:profile_manufacturing.config_install_module
msgid ""

View File

@ -25,7 +25,7 @@ import pooler
class profile_manufacturing_config_install_modules_wizard(osv.osv_memory):
_name='profile.manufacturing.config.install_modules_wizard'
_inherit = 'res.config'
_inherit = 'res.config.installer'
_columns = {
'mrp_jit':fields.boolean('Just in Time Scheduling',
@ -78,16 +78,6 @@ class profile_manufacturing_config_install_modules_wizard(osv.osv_memory):
help="Allows to manage product repairs. Handle the guarantee limit date and the invoicing of products and services."),
}
def execute(self, cr, uid, ids, context=None):
result = self.read(cr,uid,ids)
mod_obj = self.pool.get('ir.module.module')
for res in result:
for r in res:
if r != 'id' and res[r]:
ids = mod_obj.search(cr, uid, [('name', '=', r)])
mod_obj.button_install(cr, uid, ids, context=context)
cr.commit()
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
profile_manufacturing_config_install_modules_wizard()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,14 +5,20 @@
<field name="name">Manufacturing Profile: Install Extra Modules</field>
<field name="model">profile.manufacturing.config.install_modules_wizard</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Manufacturing Profile: Install Extra Modules
</attribute></form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="Here are a few modules which might be useful along with the rest of the Manufacturing profile. You can also install them the normal way later on, but if you think you'll need them to fit your requirements, you can select them now and they'll be installed immediately."/>
<form position="attributes">
<attribute name="string">Manufacturing Profile: Install Extra Modules</attribute>
</form>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">Here are a few modules which might be useful along with the rest of the Manufacturing profile. You can also install them the normal way later on, but if you think you'll need them to fit your requirements, you can select them now and they'll be installed immediately.</attribute>
</xpath>
<separator string="title" position="attributes">
<attribute name="string">Manufacturing Modules</attribute>
</separator>
<group colspan="8">
<separator string="Stock &amp; Manufacturing" colspan="4"/>
<field name="stock_location"/>
<field name="mrp_jit"/>
@ -29,7 +35,6 @@
<field name="warning"/>
<field name="portal"/>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
</data>
</field>
</record>
@ -44,7 +49,8 @@
</record>
<record model="ir.actions.todo"
id="config_install_module">
<field name="action_id" ref="action_config_install_module"/>
</record>
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -24,7 +24,7 @@ import pooler
class profile_service_config_install_modules_wizard(osv.osv_memory):
_name='profile.service.config.install_modules_wizard'
_inherit = 'res.config'
_inherit = 'res.config.installer'
_rec_name = 'crm_configuration'
_columns = {
'crm_configuration':fields.boolean('CRM & Calendars', help="This installs the customer relationship features like: leads and opportunities tracking, shared calendar, jobs tracking, bug tracker, and so on."),
@ -47,16 +47,6 @@ class profile_service_config_install_modules_wizard(osv.osv_memory):
help="An integrated wiki content management system. This is really "\
"useful to manage FAQ, quality manuals, etc.")
}
def execute(self, cr, uid, ids, context=None):
result = self.read(cr, uid, ids)
mod_obj = self.pool.get('ir.module.module')
for res in result:
for r in res:
if r != 'id' and res[r]:
ids = mod_obj.search(cr, uid, [('name', '=', r)])
mod_obj.button_install(cr, uid, ids, context=context)
cr.commit()
db, pool = pooler.restart_pool(cr.dbname, update_module=True)
profile_service_config_install_modules_wizard()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,19 +5,21 @@
<field name="name">Service Profile : Install extra modules</field>
<field name="model">profile.service.config.install_modules_wizard</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Install Extra Modules
</attribute></form>
<group string="res_config_contents" position="replace">
<label colspan="4" align="0.0" string="
A few modules are proposed according to the
'service profile' you selected. You will be able to
install them or more modules later through the
Administration menu."/>
<separator string="Services Management" colspan="4"/>
<form position="attributes">
<attribute name="string">Install Extra Service Profile Modules</attribute>
</form>
<xpath expr="//label[@string='description']"
posititon="attributes">
<attribute name="string"
>A few modules are proposed according to the 'service profile' you selected. You will be able to install them or more modules later through the Administration menu.</attribute>
</xpath>
<separator string="title" position="attributes">
<attribute name="string">Services Management</attribute>
</separator>
<group colspan="8">
<field name="project_timesheet"/>
<field name="hr_timesheet_invoice"/>
<field name="project_gtd"/>
@ -51,9 +53,8 @@
<record model="ir.actions.todo"
id="config_install_module">
<field name="action_id" ref="action_config_install_module"/>
</record>
<field name="action_id" ref="action_config_install_module"/>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -26,7 +26,7 @@
"author" : "Tiny",
"website" : "http://www.openerp.com",
"category" : "Generic Modules/Projects & Services",
"depends" : ["product", "account", "hr", "process", "mail_gateway"],
"depends" : ["product", "analytic", "hr", "process", "mail_gateway"],
"description": """Project management module that track multi-level projects, tasks,
works done on tasks, eso. It is able to render planning, order tasks, eso.
""",

View File

@ -7,34 +7,34 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 19:23+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-02-06 19:21+0000\n"
"Last-Translator: Paulino <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: 2009-12-16 05:02+0000\n"
"X-Launchpad-Export-Date: 2010-02-07 04:37+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
#: model:ir.actions.act_window,name:project.act_res_users_2_project_task_opened
msgid "Assigned tasks"
msgstr "Tarefas designadas"
msgstr "Tarefas atribuidas"
#. module: project
#: model:process.process,name:project.process_process_tasksprocess0
msgid "Tasks Process"
msgstr ""
msgstr "Processo de tarefas"
#. module: project
#: help:project.task.delegate,init,name:0
msgid "New title of the task delegated to the user."
msgstr ""
msgstr "Novo título da tarefa delegada no utilizador."
#. module: project
#: view:config.compute.remaining:0
msgid "Change Remaining Hours"
msgstr ""
msgstr "Mudar as horas restantes"
#. module: project
#: model:ir.actions.wizard,name:project.wizard_close_task
@ -44,17 +44,17 @@ msgstr "Fechar a Tarefa"
#. module: project
#: view:project.task:0
msgid "Project Tasks"
msgstr ""
msgstr "Tarefas do projecto"
#. module: project
#: model:process.transition,name:project.process_transition_opendonetask0
msgid "Open Done Task"
msgstr ""
msgstr "Abrir tarefa concluída"
#. module: project
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Nome de modelo inválido na definição da acção"
#. module: project
#: wizard_field:project.task.delegate,init,planned_hours_me:0
@ -73,6 +73,8 @@ msgid ""
"Total remaining time, can be re-estimated periodically by the assignee of "
"the task."
msgstr ""
"O tempo restante, pode ser re-estimado periodicamente pelo responsável pela "
"tarefa"
#. module: project
#: field:project.project,child_id:0
@ -82,23 +84,23 @@ msgstr "Sub-projecto"
#. module: project
#: field:project.project,members:0
msgid "Project Members"
msgstr ""
msgstr "Membros do projecto"
#. module: project
#: model:process.node,name:project.process_node_taskbydelegate0
msgid "Task by delegate"
msgstr ""
msgstr "Tarefas por delegado"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_my_project_my_run
#: model:ir.ui.menu,name:project.menu_open_view_my_project_my_run
msgid "My Running Projects"
msgstr ""
msgstr "Meus projectos em curso"
#. module: project
#: field:project.task,child_ids:0
msgid "Delegated Tasks"
msgstr "Tarefas apagadas"
msgstr "Tarefas delegadas"
#. module: project
#: help:project.project,warn_header:0
@ -106,6 +108,8 @@ msgid ""
"Header added at the beginning of the email for the warning message sent to "
"the customer when a task is closed."
msgstr ""
"Cabeçalho adicionado no início do email para a mensagem de aviso enviada "
"para o cliente quando uma tarefa é concluída."
#. module: project
#: field:project.task,priority:0
@ -115,17 +119,17 @@ msgstr "Importância"
#. module: project
#: view:config.compute.remaining:0
msgid "Update"
msgstr ""
msgstr "Actualizar"
#. module: project
#: help:project.task.delegate,init,user_id:0
msgid "User you want to delegate this task to."
msgstr ""
msgstr "Utilizador a quem pretende delegar esta tarefa."
#. module: project
#: model:ir.actions.wizard,name:project.wizard_attachment_task
msgid "All Attachments"
msgstr ""
msgstr "Todos oa anexos"
#. module: project
#: model:process.transition.action,name:project.process_transition_action_openpendingtask0
@ -135,7 +139,7 @@ msgstr "Definir como pendente"
#. module: project
#: model:process.node,note:project.process_node_drafttask0
msgid "Define the Requirements and Set Planned Hours."
msgstr ""
msgstr "Definir as exigências e fixar as horas planeadas."
#. module: project
#: model:ir.actions.act_window,name:project.open_task_type_form
@ -146,7 +150,7 @@ msgstr "Tipos de tarefas"
#. module: project
#: view:project.project:0
msgid "New Project Based on Template"
msgstr ""
msgstr "Novo projecto baseado num modelo"
#. module: project
#: model:ir.actions.act_window,name:project.dblc_proj
@ -170,22 +174,26 @@ msgid ""
"works done on tasks, eso. It is able to render planning, order tasks, eso.\n"
" "
msgstr ""
"Modulo de Gestão de Projectos que gere projectos multi-nível, tarefas, \n"
"trabalhos concluídos das tarefas, etc. Apresenta o planeamento, atribui "
"tarefas, etc.\n"
" "
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task5_prog_prog
#: model:ir.ui.menu,name:project.menu_tasks_yours_prog_prog
msgid "My Tasks in Progress"
msgstr "Minhas tarefas em progesso"
msgstr "Minhas tarefas em curso"
#. module: project
#: view:project.project:0
msgid "Set as Template"
msgstr ""
msgstr "Definir como modelo"
#. module: project
#: model:process.node,name:project.process_node_drafttask0
msgid "Draft task"
msgstr ""
msgstr "Tarefa rascunho"
#. module: project
#: model:ir.model,name:project.model_project_task
@ -199,6 +207,8 @@ msgid ""
"Estimated time for you to validate the work done by the user to whom you "
"delegate this task."
msgstr ""
"Tempo estimado para validar o trabalho realizado pelo utilizador a quem "
"delegou esta tarefa."
#. module: project
#: view:project.project:0
@ -211,12 +221,12 @@ msgstr "Notas"
#. module: project
#: selection:res.company,project_time_mode:0
msgid "Days"
msgstr ""
msgstr "Dias"
#. module: project
#: model:project.task.type,name:project.project_tt_analysis
msgid "Analysis"
msgstr ""
msgstr "Análise"
#. module: project
#: model:ir.model,name:project.model_project_project
@ -229,19 +239,21 @@ msgstr "Projecto"
#. module: project
#: view:project.task:0
msgid "Start Task"
msgstr ""
msgstr "Iniciar Tarefa"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task5_prog_draft
#: model:ir.ui.menu,name:project.menu_tasks_yours_prog_draft
msgid "My Draft Tasks"
msgstr ""
msgstr "Minhas tarefas rascunho"
#. module: project
#: view:project.project:0
msgid ""
"Automatic variables for headers and footer. Use exactly the same notation."
msgstr ""
"Variáveis automáticas para cabeçalhos e rodapés. Use exactamente a mesma "
"notação."
#. module: project
#: selection:project.project,state:0
@ -253,27 +265,27 @@ msgstr "Cancelado"
#: view:project.project:0
#: field:project.project,warn_header:0
msgid "Mail Header"
msgstr ""
msgstr "Cabeçalho da mensagem"
#. module: project
#: model:process.node,name:project.process_node_donetask0
msgid "Done task"
msgstr ""
msgstr "Tarefas concluídas"
#. module: project
#: model:process.node,note:project.process_node_donetask0
msgid "Task is Completed"
msgstr ""
msgstr "Tarefa está concluída"
#. module: project
#: model:process.transition,note:project.process_transition_delegate0
msgid "Delegates tasks to the other user"
msgstr ""
msgstr "Delega tarefas ao outro utilizador"
#. module: project
#: help:project.task,effective_hours:0
msgid "Computed using the sum of the task work done."
msgstr ""
msgstr "Calculado usando a soma das tarefas realizadas."
#. module: project
#: help:project.project,warn_customer:0
@ -281,16 +293,18 @@ msgid ""
"If you check this, the user will have a popup when closing a task that "
"propose a message to send by email to the customer."
msgstr ""
"Se assinalar aqui, irá aparecer ao utilizador uma janela ao terminar uma "
"tarefa, a propor o envio de uma mensagem ao cliente."
#. module: project
#: help:project.task.delegate,init,new_task_description:0
msgid "Reinclude the description of the task in the task of the user."
msgstr ""
msgstr "Re-incluir a descrição da tarefa na tarefa do utilizador."
#. module: project
#: field:project.project,category_id:0
msgid "Analytic Account"
msgstr "Conta da contabilidade analítica"
msgstr "Conta analítica"
#. module: project
#: field:project.task.work,user_id:0
@ -307,7 +321,7 @@ msgstr "Todas as tarefas"
#. module: project
#: view:project.task:0
msgid "Planning"
msgstr ""
msgstr "Planeamento"
#. module: project
#: view:project.task:0
@ -318,7 +332,7 @@ msgstr "Informação extra"
#: field:project.project,partner_id:0
#: field:project.task,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Parceiro"
#. module: project
#: field:project.task,planned_hours:0
@ -329,12 +343,12 @@ msgstr "Horas planeadas"
#. module: project
#: view:project.project:0
msgid "Task: %(name)s"
msgstr "Tarefa: %(nome)s"
msgstr "Tarefa: %(name)s"
#. module: project
#: view:project.project:0
msgid "Reset as Project"
msgstr ""
msgstr "Redefinir como Projecto"
#. module: project
#: view:project.task:0
@ -346,6 +360,7 @@ msgstr "Delegações"
msgid ""
"Project's member. Not used in any computation, just for information purpose."
msgstr ""
"Membros do projecto. Não utilizado em nenhum cálculo, apenas para informação."
#. module: project
#: view:project.project:0
@ -356,22 +371,23 @@ msgstr "Meus projectos"
#: model:ir.actions.act_window,name:project.open_view_project_all
#: model:ir.ui.menu,name:project.menu_open_view_project_all
msgid "All projects"
msgstr ""
msgstr "Todos os projectos"
#. module: project
#: model:process.transition,note:project.process_transition_draftopentask0
msgid "From draft state, it will come into the open state."
msgstr ""
msgstr "De estado \"Rascunho\", vai passar ao estado \"Aberto\"."
#. module: project
#: wizard_view:project.task.delegate,init:0
msgid "Delegated Task"
msgstr "Tarefas atribuída"
msgstr "Tarefa delegada"
#. module: project
#: help:project.project,progress_rate:0
msgid "Percent of tasks closed according to the total of tasks todo."
msgstr ""
"Percentagem de tarefas fechadas em relação ao total de tarefas a fazer."
#. module: project
#: wizard_field:project.task.delegate,init,new_task_description:0
@ -381,17 +397,17 @@ msgstr "Descrição da nova tarefa"
#. module: project
#: help:project.project,notes:0
msgid "Internal description of the project."
msgstr ""
msgstr "Descrição interna do projecto."
#. module: project
#: field:project.project,parent_id:0
msgid "Parent Project"
msgstr ""
msgstr "Projecto-pai"
#. module: project
#: help:project.task,total_hours:0
msgid "Computed as: Time Spent + Remaining Time."
msgstr ""
msgstr "Calculado como: Tempo dispendido + tempo restante"
#. module: project
#: field:project.task,type:0
@ -402,31 +418,31 @@ msgstr "Tipo"
#. module: project
#: selection:res.company,project_time_mode:0
msgid "Weeks"
msgstr ""
msgstr "Semanas"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task5_prog
#: model:ir.ui.menu,name:project.menu_tasks_yours_prog
msgid "My Current Tasks"
msgstr ""
msgstr "Minhas tarefas actuais"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_project
#: model:ir.ui.menu,name:project.menu_open_view_project
msgid "New Project"
msgstr ""
msgstr "Novo projecto"
#. module: project
#: selection:project.task,priority:0
msgid "Medium"
msgstr "Médio"
msgstr "Meio"
#. module: project
#: view:config.compute.remaining:0
#: field:config.compute.remaining,remaining_hours:0
#: field:project.task,remaining_hours:0
msgid "Remaining Hours"
msgstr ""
msgstr "Horas restantes"
#. module: project
#: model:ir.model,name:project.model_project_task_type
@ -436,7 +452,7 @@ msgstr "Tipo de tarefa do projecto"
#. module: project
#: field:project.project,planned_hours:0
msgid "Planned Time"
msgstr ""
msgstr "Tempo planeado"
#. module: project
#: model:ir.model,name:project.model_project_task_work
@ -448,7 +464,7 @@ msgstr "Trabalho da tarefa"
#. module: project
#: selection:res.company,project_time_mode:0
msgid "Hours"
msgstr ""
msgstr "Horas"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task5_pending
@ -461,7 +477,7 @@ msgstr "Minhas tarefas pendentes"
#: model:ir.actions.act_window,name:project.action_view_task6_prog
#: model:ir.ui.menu,name:project.menu_action_view_task6_prog
msgid "Tasks in Progress"
msgstr "Tarefas em progressos"
msgstr "Tarefas em curso"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task7
@ -472,23 +488,23 @@ msgstr "Tarefas não atribuídas"
#. module: project
#: wizard_field:project.task.delegate,init,name:0
msgid "Delegated Title"
msgstr ""
msgstr "Título delegado"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_my_project
#: model:ir.ui.menu,name:project.menu_open_view_my_project
msgid "My Projects"
msgstr ""
msgstr "Meus projectos"
#. module: project
#: help:project.task.delegate,init,planned_hours:0
msgid "Estimated time to close this task by the delegated user."
msgstr ""
msgstr "Tempo estimado para fechar esta tarefa pelo utilizador delegado."
#. module: project
#: selection:project.project,state:0
msgid "Template"
msgstr ""
msgstr "Modelo"
#. module: project
#: model:ir.ui.menu,name:project.menu_definitions
@ -500,7 +516,7 @@ msgstr "Configuração"
#: field:project.project,date_start:0
#: field:project.task,date_start:0
msgid "Starting Date"
msgstr ""
msgstr "Data Inicial"
#. module: project
#: model:ir.ui.menu,name:project.menu_all_project
@ -511,7 +527,7 @@ msgstr "Projectos"
#. module: project
#: view:project.task:0
msgid "Dates"
msgstr ""
msgstr "Datas"
#. module: project
#: field:project.task,history:0
@ -521,22 +537,22 @@ msgstr "Detalhes da tarefa"
#. module: project
#: model:process.node,name:project.process_node_triggerinvoice0
msgid "Trigger Invoice"
msgstr ""
msgstr "Despoletar factura"
#. module: project
#: model:process.transition,name:project.process_transition_draftopentask0
msgid "Draft Open task"
msgstr ""
msgstr "Rascunho da tarefa em aberto"
#. module: project
#: view:project.project:0
msgid "User: %(user_id)s"
msgstr "Utilizador: %(id_de_utilizador)s"
msgstr "Utilizador: %(user_id)s"
#. module: project
#: field:project.task,delay_hours:0
msgid "Delay Hours"
msgstr ""
msgstr "Horas de demora"
#. module: project
#: field:project.project,contact_id:0
@ -547,25 +563,25 @@ msgstr "Contacto"
#: model:process.transition,name:project.process_transition_delegate0
#: view:project.task:0
msgid "Delegate"
msgstr "Delegar"
msgstr "Delegado"
#. module: project
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML inválido para a arquitectura de vista"
msgstr "XML inválido para a arquitectura da vista"
#. module: project
#: model:ir.module.module,shortdesc:project.module_meta_information
#: model:ir.ui.menu,name:project.menu_main
#: view:res.company:0
msgid "Project Management"
msgstr "Gestão de projectos"
msgstr "Gestão de Projectos"
#. module: project
#: field:project.project,effective_hours:0
#: field:project.task.work,hours:0
msgid "Time Spent"
msgstr ""
msgstr "Tempo despendido"
#. module: project
#: model:ir.ui.menu,name:project.menu_tasks
@ -582,12 +598,12 @@ msgstr "Tipo de tarefa"
#: model:ir.actions.act_window,name:project.action_view_task_new
#: model:ir.ui.menu,name:project.menu_action_view_task_new
msgid "New Task"
msgstr "Nova Tarefa"
msgstr "Nova tarefa"
#. module: project
#: help:project.project,timesheet_id:0
msgid "Timetable working hours to adjust the gantt diagram report"
msgstr ""
msgstr "Horário de trabalho para ajustar o relatório de diagrama de Gantt"
#. module: project
#: view:project.project:0
@ -597,12 +613,12 @@ msgstr "Membros do projecto"
#. module: project
#: model:process.transition,note:project.process_transition_taskinvoice0
msgid "After task is completed, Create its invoice."
msgstr ""
msgstr "Após a conclusão da tarefa, crie a factura."
#. module: project
#: help:project.task,progress:0
msgid "Computed as: Time Spent / Total Time."
msgstr ""
msgstr "Calculado como: Tempo despendido / tempo total"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task4
@ -613,22 +629,22 @@ msgstr "Minhas tarefas"
#. module: project
#: view:project.project:0
msgid "Status: %(state)s"
msgstr "Estado: %(estado)s"
msgstr "Estado: %(state)s"
#. module: project
#: view:project.task:0
msgid "Planned"
msgstr ""
msgstr "Planeado"
#. module: project
#: help:project.project,total_hours:0
msgid "Sum of total hours of all tasks related to this project."
msgstr ""
msgstr "Soma do total de horas das tarefas relacionadas com este projecto."
#. module: project
#: view:project.task:0
msgid "Delegated tasks"
msgstr "Tarefas atribuídas"
msgstr "Tarefas delegadas"
#. module: project
#: view:project.task:0
@ -638,7 +654,7 @@ msgstr "Informação"
#. module: project
#: view:project.task:0
msgid "Review"
msgstr ""
msgstr "Rever"
#. module: project
#: view:project.project:0
@ -653,7 +669,7 @@ msgstr "E-Mails"
#. module: project
#: model:process.node,note:project.process_node_triggerinvoice0
msgid "Trigger invoices from sale order lines"
msgstr ""
msgstr "Despoletar facturas desde as linhas da ordem de venda"
#. module: project
#: model:process.transition.action,name:project.process_transition_action_opendrafttask0
@ -670,7 +686,7 @@ msgstr "Baixo"
#. module: project
#: field:project.project,manager:0
msgid "Project Manager"
msgstr ""
msgstr "Gestor do projecto"
#. module: project
#: view:project.project:0
@ -692,17 +708,19 @@ msgid ""
"New state of your own task. Pending will be reopened automatically when the "
"delegated task is closed."
msgstr ""
"Novo estado da sua tarefa. As pendentes serão reabertas automaticamente "
"assim que as tarefas delegadas sejam fechadas."
#. module: project
#: field:res.company,project_time_mode:0
msgid "Project Time Unit"
msgstr ""
msgstr "Unidade de tempo do projecto"
#. module: project
#: field:project.project,complete_name:0
#: field:project.project,name:0
msgid "Project Name"
msgstr ""
msgstr "Nome do projecto"
#. module: project
#: wizard_button:project.task.close,mail_ask,mail_send:0
@ -712,7 +730,7 @@ msgstr "Enviar mensagem"
#. module: project
#: field:project.project,total_hours:0
msgid "Total Time"
msgstr ""
msgstr "Tempo total"
#. module: project
#: field:project.task,active:0
@ -722,12 +740,12 @@ msgstr "Activo"
#. module: project
#: model:project.task.type,name:project.project_tt_bug
msgid "Bug"
msgstr ""
msgstr "Erro"
#. module: project
#: model:project.task.type,name:project.project_tt_quote
msgid "Quotation"
msgstr ""
msgstr "Cotação"
#. module: project
#: view:project.task:0
@ -740,6 +758,8 @@ msgid ""
"Computed as: Total Time - Estimated Time. It gives the difference of the "
"time estimated by the project manager and the real time to close the task."
msgstr ""
"Calculado como: Tempo total - Tempo estimado. Da a diferença entre o tempo "
"estimado pelo gestor do projecto e o tempo real para fechar a tarefa."
#. module: project
#: model:process.node,name:project.process_node_opentask0
@ -749,17 +769,17 @@ msgstr "Abrir tarefa"
#. module: project
#: field:project.project,timesheet_id:0
msgid "Working Time"
msgstr ""
msgstr "Tempo de trabalho"
#. module: project
#: selection:res.company,project_time_mode:0
msgid "Months"
msgstr ""
msgstr "Meses"
#. module: project
#: model:process.transition,note:project.process_transition_opendonetask0
msgid "When task is completed, it will come into the done state."
msgstr ""
msgstr "Quando a tarefa estiver completa, aparecerá no estado de concluído."
#. module: project
#: field:project.task.work,date:0
@ -772,7 +792,7 @@ msgid ""
"This will set the unit of measure used in projects and tasks.\n"
"If you use the timesheet linked to projects (project_timesheet module), "
"don't forget to setup the right unit of measure in your employees."
msgstr ""
msgstr "Isto define a unidade de medida usada nos projectos e tarefas."
#. module: project
#: model:ir.actions.act_window,name:project.act_res_users_2_project_project
@ -782,7 +802,7 @@ msgstr "Projectos do utilizador"
#. module: project
#: view:project.project:0
msgid "Reactivate Project"
msgstr ""
msgstr "Reactivar projecto"
#. module: project
#: selection:project.task,priority:0
@ -797,7 +817,7 @@ msgstr "Delegar esta tarefa a um utilizador"
#. module: project
#: field:project.task,delegated_user_id:0
msgid "Delegated To"
msgstr "Delegar a"
msgstr "Delegado a"
#. module: project
#: field:project.task,date_close:0
@ -815,11 +835,14 @@ msgid ""
"Estimated time to do the task, usually set by the project manager when the "
"task is in draft state."
msgstr ""
"Tempo estimado para executar esta tarefa, normalmente definido pelo gestor "
"do projecto quando a tarefa encontra-se em rascunho."
#. module: project
#: help:project.project,effective_hours:0
msgid "Sum of spent hours of all tasks related to this project."
msgstr ""
"Soma das horas despendido em todas as tarefas relacionadas com este projecto."
#. module: project
#: help:project.task,project_id:0
@ -827,11 +850,14 @@ msgid ""
"If you have [?] in the project name, it means there are no analytic account "
"linked to this project."
msgstr ""
"Se o nome do projecto contiver \"?\", isso significa que não há conta "
"analítica ligada a este projecto."
#. module: project
#: help:project.project,planned_hours:0
msgid "Sum of planned hours of all tasks related to this project."
msgstr ""
"Soma das horas planeadas de todas as tarefas relacionadas com este projecto."
#. module: project
#: model:ir.actions.act_window,name:project.act_res_users_2_project_task_work_month
@ -842,17 +868,17 @@ msgstr "Trabalhos do mês"
#: model:ir.actions.report.xml,name:project.report_project_project_gantt
#: model:ir.actions.report.xml,name:project.report_project_task_gantt
msgid "Gantt Representation"
msgstr "Garantir representação"
msgstr "Representação Gantt"
#. module: project
#: field:project.project,warn_customer:0
msgid "Warn Partner"
msgstr ""
msgstr "Alertar Parceiro"
#. module: project
#: field:project.project,state:0
msgid "State"
msgstr ""
msgstr "Estado"
#. module: project
#: field:project.task,name:0
@ -862,7 +888,7 @@ msgstr "Sumário da tarefa"
#. module: project
#: view:project.project:0
msgid "Date Start: %(date_start)s"
msgstr "Data de inicio: %(data_inicio)s"
msgstr "Data de inicio: %(date_start)s"
#. module: project
#: help:project.project,category_id:0
@ -871,6 +897,9 @@ msgid ""
"projects. It enables you to connect projects with budgets, planning, cost "
"and revenue analysis, timesheets on projects, etc."
msgstr ""
"Ligue este projecto a uma conta analítica caso precisar de gestão financeira "
"nos projectos. Permite-lhe ligar projectos a orçamentos, planeamento, "
"análise de custos e de receitas, calendário de projectos, etc."
#. module: project
#: view:project.project:0
@ -895,64 +924,65 @@ msgstr "Cancelar"
#. module: project
#: model:ir.actions.act_window,name:project.act_project_project_2_project_task_new
msgid "Create a Task"
msgstr ""
msgstr "Criar uma tarefa"
#. module: project
#: model:process.transition.action,name:project.process_transition_action_draftopentask0
msgid "Open"
msgstr "Abrir"
msgstr "Em aberto"
#. module: project
#: view:project.project:0
msgid "ID: %(task_id)s"
msgstr "Id: %(id_tarefa)s"
msgstr "Id: %(task_id)s"
#. module: project
#: selection:project.task,state:0
msgid "In Progress"
msgstr ""
msgstr "Em curso"
#. module: project
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"O nome do objecto deve começar com x_ e não pode conter um carácter especial!"
"O nome do Objecto deve começar com x_ e não pode conter nenhum caractere "
"especial !"
#. module: project
#: view:project.task:0
msgid "Reactivate"
msgstr ""
msgstr "Reactivar"
#. module: project
#: field:project.task,parent_id:0
msgid "Parent Task"
msgstr "Tarefas ascendente"
msgstr "Tarefa-pai"
#. module: project
#: view:project.task:0
msgid "Delay"
msgstr ""
msgstr "Demora"
#. module: project
#: selection:project.task,priority:0
msgid "Very Low"
msgstr "Muito baixa"
msgstr "Muito baixo"
#. module: project
#: wizard_view:project.task.close,mail_ask:0
msgid "Send mail to customer"
msgstr "Enviar correspondencia ao cliente"
msgstr "Enviar correio ao cliente"
#. module: project
#: field:project.project,warn_manager:0
msgid "Warn Manager"
msgstr ""
msgstr "Alertar o gestor"
#. module: project
#: model:ir.model,name:project.model_config_compute_remaining
msgid "config.compute.remaining"
msgstr ""
msgstr "config.compute.remaining"
#. module: project
#: wizard_button:project.task.close,mail_ask,close:0
@ -962,12 +992,12 @@ msgstr "Fecho silencioso"
#. module: project
#: help:project.task.delegate,init,prefix:0
msgid "New title of your own task to validate the work done."
msgstr ""
msgstr "Novo título da sua própria tarefa para validar o trabalho feito."
#. module: project
#: field:project.task,progress:0
msgid "Progress (%)"
msgstr ""
msgstr "Progresso (%)"
#. module: project
#: field:project.task,description:0
@ -979,13 +1009,13 @@ msgstr "Descrição"
#. module: project
#: model:process.transition,name:project.process_transition_taskinvoice0
msgid "Task invoice"
msgstr ""
msgstr "Factura da tarefa"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_my_project_open
#: model:ir.ui.menu,name:project.menu_open_view_my_project_open
msgid "Projects Structure"
msgstr ""
msgstr "Estrutura do projecto"
#. module: project
#: wizard_view:project.task.delegate,init:0
@ -995,12 +1025,12 @@ msgstr "Validação da tarefa"
#. module: project
#: field:project.task,work_ids:0
msgid "Work done"
msgstr "Trabalho concluído"
msgstr "Trabalho feito"
#. module: project
#: selection:project.project,state:0
msgid "Running"
msgstr ""
msgstr "Em execução"
#. module: project
#: help:project.project,parent_id:0
@ -1008,11 +1038,13 @@ msgid ""
"If you have [?] in the name, it means there are no analytic account linked "
"to project."
msgstr ""
"Se o nome contiver [?], significa que não há nenhuma conta analítica ligada "
"a este projecto."
#. module: project
#: model:ir.actions.wizard,name:project.wizard_delegate_task
msgid "Delegate Task"
msgstr "Tarefas delegadas"
msgstr "Delegar tarefa"
#. module: project
#: field:project.project,tasks:0
@ -1025,42 +1057,44 @@ msgid ""
"If you check this field, the project manager will receive a request each "
"time a task is completed by his team."
msgstr ""
"Se assinalar este campo, o gestor do projecto recebe uma notificação sempre "
"que uma tarefa é concluída pela sua equipa."
#. module: project
#: model:project.task.type,name:project.project_tt_feature
msgid "New Feature"
msgstr ""
msgstr "Nova característica"
#. module: project
#: model:process.node,note:project.process_node_opentask0
msgid "Encode your working hours."
msgstr ""
msgstr "Registe as suas horas de trabalho."
#. module: project
#: wizard_field:project.task.delegate,init,prefix:0
msgid "Your Task Title"
msgstr ""
msgstr "O título da sua tarefa"
#. module: project
#: model:res.request.link,name:project.req_link_task
msgid "Project task"
msgstr "Tarefas do projecto"
msgstr "Tarefa do projecto"
#. module: project
#: field:project.task,effective_hours:0
msgid "Hours Spent"
msgstr ""
msgstr "Horas despendidas"
#. module: project
#: field:project.task,total_hours:0
msgid "Total Hours"
msgstr ""
msgstr "Horas totais"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_template_project
#: model:ir.ui.menu,name:project.menu_template_project
msgid "Template of Projects"
msgstr ""
msgstr "Modelo de projectos"
#. module: project
#: field:project.project,priority:0
@ -1074,6 +1108,8 @@ msgid ""
"Footer added at the beginning of the email for the warning message sent to "
"the customer when a task is closed."
msgstr ""
"Rodapé adicionado no início do email para a mensagem de aviso enviada ao "
"cliente quando uma tarefa é fechada."
#. module: project
#: view:project.project:0
@ -1083,7 +1119,7 @@ msgstr "Informação do parceiro"
#. module: project
#: model:ir.actions.act_window,name:project.action_config_compute_remaining
msgid "Compute Remaining Hours"
msgstr ""
msgstr "Calcular as restantes horas"
#. module: project
#: wizard_field:project.task.delegate,init,state:0
@ -1093,7 +1129,7 @@ msgstr "Estado de validação"
#. module: project
#: constraint:project.project:0
msgid "Error ! You can not create recursive projects."
msgstr ""
msgstr "Erro! não pode criar projectos recursivamente."
#. module: project
#: field:project.task,date_deadline:0
@ -1103,7 +1139,7 @@ msgstr "Prazo limite"
#. module: project
#: wizard_field:project.task.delegate,init,user_id:0
msgid "Assign To"
msgstr "Designar para"
msgstr "Atribuir a"
#. module: project
#: field:project.task.work,name:0
@ -1113,26 +1149,26 @@ msgstr "Sumário do trabalho"
#. module: project
#: view:project.project:0
msgid "Date Stop: %(date_stop)s"
msgstr "Data de paragem: %(data_de_paragem)s"
msgstr "Data do fim: %(date_stop)s"
#. module: project
#: field:project.project,date_end:0
msgid "Expected End"
msgstr ""
msgstr "Fim esperado"
#. module: project
#: model:process.node,note:project.process_node_taskbydelegate0
msgid "Delegate your task to the other user"
msgstr ""
msgstr "Delegue a sua tarefa ao outro utilizador"
#. module: project
#: view:project.project:0
#: field:project.project,warn_footer:0
msgid "Mail Footer"
msgstr ""
msgstr "Rodapé do mensagem"
#. module: project
#: model:ir.actions.act_window,name:project.open_view_project_open
#: model:ir.ui.menu,name:project.menu_open_view_project_open
msgid "Running projects"
msgstr ""
msgstr "Projectos em curso"

File diff suppressed because it is too large Load Diff

View File

@ -26,15 +26,30 @@ class project_installer(osv.osv_memory):
_columns = {
# Project Management
'project_long_term':fields.boolean('Long Term Planning'),
'project_wiki':fields.boolean('Specifications in a Wiki'),
'hr_timesheet_sheet':fields.boolean('Timesheets'),
'hr_timesheet_invoice':fields.boolean('Invoice Based on Hours'),
'account_budget':fields.boolean('Budgets'),
'project_messages':fields.boolean('Project Messages'),
'project_crm':fields.boolean('Issues Tracker & Features Requests'),
'project_long_term':fields.boolean('Long Term Planning',
help="Enables long-term projects tracking, including "
"multiple-phase projects and resource allocation handling."),
'project_wiki':fields.boolean('Specifications in a Wiki',
help=""),
'hr_timesheet_sheet':fields.boolean('Timesheets',
help="Tracks and helps employees encode and validate timesheets "
"and attendance."),
'hr_timesheet_invoice':fields.boolean('Invoice Based on Hours',
help="Helps generate invoice based on based on human resources "
"costs and general expenses."),
'account_budget':fields.boolean('Budgets',
help="Helps accountants manage analytic and crossover budgets."),
'project_messages':fields.boolean('Project Messages',
help="Lets employees send messages to other members of the "
"projects they're working on."),
'project_crm':fields.boolean('Issues Tracker',
help="Automatically synchronizes project tasks and crm cases."),
# Methodologies
'scrum':fields.boolean('SCRUM'),
'project_gtd':fields.boolean('Getting Things Done'),
'scrum':fields.boolean('SCRUM',
help="Implements and tracks the concepts and task types defined "
"in the SCRUM methodology."),
'project_gtd':fields.boolean('Getting Things Done',
help="Embeds the Getting Things Done concepts into OpenERP's "
"project management."),
}
project_installer()

View File

@ -60,18 +60,6 @@
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_triggerinvoice0" model="process.node">
<field name="menu_id" ref="account.menu_finance_invoice"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Trigger Invoice&quot;&quot;&quot;" name="name"/>
<field name="subflow_id" ref="account.process_process_invoiceprocess0"/>
<field eval="&quot;&quot;&quot;Trigger invoices from sale order lines&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_tasksprocess0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
@ -103,14 +91,6 @@
<field model="process.node" name="source_node_id" ref="process_node_opentask0"/>
</record>
<record id="process_transition_taskinvoice0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Task invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After task is completed, Create its invoice.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_triggerinvoice0"/>
<field model="process.node" name="source_node_id" ref="process_node_donetask0"/>
</record>
<!--
Process Action

View File

@ -546,10 +546,9 @@ def _project_get(self, cr, uid, context={}):
else:
cr.execute("""SELECT project.id,account.name FROM project_project project
LEFT JOIN account_analytic_account account ON account.id = project.category_id
WHERE (account.user_id = %s) OR project.id IN (SELECT project_id FROM project_resource_rel
WHERE resource_id IN (SELECT id FROM resource_resource
WHERE (user_id= %s)))"""%(uid, uid))
WHERE (account.user_id = %s)"""%(uid))
res = cr.fetchall()
print res
res = [(str(r[0]),r[1]) for r in res]
return res

View File

@ -4,49 +4,34 @@
<field name="name">project.installer.view</field>
<field name="model">project.installer</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.res_config_view_base"/>
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes"><attribute name="string">
Project Modules Installation
</attribute></form>
<form position="attributes">
<attribute name="string">Project Modules Installation</attribute>
</form>
<group string="res_config_contents" position="replace">
<separator string="Configure Your Project Management"
colspan="4"/>
<image name="gtk-dialog-info"/>
<newline/>
<label align="0.0" string=" Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Cras metus
augue, ultricies et vehicula id, fringilla quis
mauris. Vestibulum fringilla ipsum sit amet est
adipiscing eget euismod velit semper. Proin non mauris
velit. Donec malesuada nisi sed augue viverra commodo
sagittis nisi rutrum. Cras vitae libero nunc, a
molestie sapien. Proin et augue sit amet est egestas
fermentum ut eu lacus. Etiam nisi orci, volutpat
aliquam viverra interdum, vehicula iaculis
lectus. Mauris ligula sapien, auctor in pharetra non,
ultrices quis odio."/>
<group>
<separator string="Project Management" colspan="4"/>
<field name="project_long_term"/>
<field name="project_wiki"/>
<field name="hr_timesheet_sheet"/>
<field name="hr_timesheet_invoice"/>
<field name="account_budget"/>
<field name="project_messages"/>
<field name="project_crm"/>
<separator string="Methodologies" colspan="4"/>
<field name="scrum"/>
<field name="project_gtd"/>
</group>
</group>
<xpath expr='//button[@name="action_skip"]' position='replace'/>
<xpath expr='//button[@name="action_next"]' position='attributes'>
<attribute name='string'>Install Modules</attribute>
<separator string="title" position="attributes">
<attribute name="string"
>Configure Your Project Management</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">Various OpenERP applications are available to bring your project management to the next levels of control and flexibility.</attribute>
</xpath>
<group colspan="8">
<separator string="Project Management" colspan="4"/>
<field name="project_long_term"/>
<field name="project_wiki"/>
<field name="hr_timesheet_sheet"/>
<field name="hr_timesheet_invoice"/>
<field name="account_budget"/>
<field name="project_messages"/>
<field name="project_crm"/>
<separator string="Methodologies" colspan="4"/>
<field name="scrum"/>
<field name="project_gtd"/>
</group>
</data>
</field>
</record>
@ -63,7 +48,7 @@
<record id="project_installer_todo" model="ir.actions.todo">
<field name="action_id" ref="action_project_installer"/>
<field name="sequence">1</field>
<field name="sequence">3</field>
</record>
</data>
</openerp>

View File

@ -347,7 +347,7 @@
<tree colors="grey:state in ('cancelled','done');blue:remaining_hours&lt;0;red:bool(date_deadline) and (date_deadline&lt;current_date) and (state in ('draft','open'));black:state not in ('cancelled','done')" string="Tasks">
<field name="sequence" invisible="1"/>
<field name="name"/>
<field name="project_id" icon="gtk-indent" invisible="context.get('set_visible',False)"/>
<field name="project_id" icon="gtk-indent"/>
<field name="user_id"/>
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" invisible="context.get('set_visible',False)"/>
<field name="date_deadline" invisible="context.get('set_visible',False)"/>
@ -371,29 +371,6 @@
</field>
</record>
<record id="view_task_tree3" model="ir.ui.view">
<field name="name">project.task.tree</field>
<field name="model">project.task</field>
<field name="type">tree</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<tree editable="top" colors="grey:state in ('cancelled','done');blue:remaining_hours&lt;0;red:bool(date_deadline) and (date_deadline&lt;current_date) and (state in ('draft','open'));black:state not in ('cancelled','done')" string="Tasks">
<field name="sequence" string="Seq."/>
<field name="name"/>
<field name="project_id" icon="gtk-indent"/>
<field name="user_id"/>
<field name="date_deadline"/>
<field name="remaining_hours" widget="float_time"/>
<field name="progress" widget="progressbar"/>
<field name="state"/>
<button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state"/>
<button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state"/>
<button name="%(wizard_close_task)d" states="pending,open" string="Done" type="action" icon="gtk-jump-to" help="For changing to done state"/>
<button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
</tree>
</field>
</record>
<record id="view_task_calendar" model="ir.ui.view">
<field name="name">project.task.calendar</field>
<field name="model">project.task</field>
@ -443,7 +420,9 @@
<group col="20" colspan="4">
<filter string="Current" domain="[('state','in',('open','draft'))]" help="Open and Draft Tasks" icon="terp-project" default="1"/>
<filter string="In Progress" domain="[('state','=','open')]" help="Open Tasks" icon="terp-project"/>
<filter string="Pending" domain="[('state','=','pending')]" help="Pending Tasks" icon="terp-project"/>
<filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-project"/>
<separator orientation="vertical"/>
<filter string="Deadlines" domain="[('date_deadline','&lt;&gt;',False)]" help="Show only tasks having a deadline" icon="terp-project"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="project_id" select="1" widget="selection" default="context.get('project_id', False)">
@ -460,6 +439,7 @@
<filter string="By Stage" icon="terp-project" domain="[]" context="{'group_by':'type'}"/>
<filter string="By State" icon="terp-project" domain="[]" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Deadline" icon="terp-project" domain="[]" context="{'group_by':'date_deadline'}"/>
<filter string="Start Date" icon="terp-project" domain="[]" context="{'group_by':'date_start'}"/>
<filter string="End Date" icon="terp-project" domain="[]" context="{'group_by':'date_end'}"/>
</group>

View File

@ -1,8 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","account.model_account_analytic_account","project.group_project_user",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,1,1,1
"access_project_project","project.project","model_project_project","project.group_project_user",1,0,0,0
"access_account_analytic_account","account.analytic.account","account.model_account_analytic_account","project.group_project_user",1,0,0,0
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,0,0,0
"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,0,0,1
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_project_project_manager project.project manager model_project_project project.group_project_manager 1 1 1 1
3 access_account_analytic_account_manager account.analytic.account account.model_account_analytic_account analytic.model_account_analytic_account project.group_project_user 1 1 1 1
4 access_project_project project.project model_project_project project.group_project_user 1 0 0 0
5 access_account_analytic_account account.analytic.account account.model_account_analytic_account analytic.model_account_analytic_account project.group_project_user 1 0 0 0
6 access_project_task_type_user project.task.type user model_project_task_type project.group_project_user 1 0 0 1
7 access_project_task_type project.task.type model_project_task_type project.group_project_manager 1 1 1 1
8 access_project_task_manager project.task manager model_project_task project.group_project_manager 1 1 1 1

View File

@ -19,7 +19,7 @@
#
##############################################################################
import report_analytic_planning
import project_planning
import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -46,12 +46,12 @@ At the end of the month, the planning manager can also check if the encoded time
'init_xml': [],
'update_xml': [
'security/ir.model.access.csv',
'report_analytic_planning_view.xml',
'report_analytic_planning_report.xml'
'project_planning_view.xml',
'project_planning_report.xml'
],
'demo_xml': [
#'report_account_analytic.planning.csv',
'report_analytic_planning_demo.xml',
'project_planning_demo.xml',
],
'installable': True,
'active': False,

Some files were not shown because too many files have changed in this diff Show More