add project revenue as per month year
This commit is contained in:
parent
78c1eb8721
commit
1bca1089ce
|
@ -0,0 +1,2 @@
|
|||
from . import models
|
||||
from . import wizard
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
'name': 'Project Revenue',
|
||||
'version': '1.0.1',
|
||||
'category': 'Project',
|
||||
'author': 'SunArc Technologies',
|
||||
'website': 'www.sunarctechnologies.com',
|
||||
'license': 'LGPL-3',
|
||||
'depends': ['base','hr','project'],
|
||||
'data': [
|
||||
'wizard/project_revenue_wizard.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'views/custom_project.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
from . import custom_project
|
|
@ -0,0 +1,34 @@
|
|||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError, AccessError, ValidationError
|
||||
from datetime import datetime
|
||||
from dateutil import relativedelta
|
||||
|
||||
|
||||
class CustomProject(models.Model):
|
||||
_inherit = 'project.project'
|
||||
|
||||
revenue_amount_lines = fields.One2many('project.revenue.lines' , 'project_id')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class ProjectRevenueLines(models.Model):
|
||||
_name = 'project.revenue.lines'
|
||||
|
||||
|
||||
project_id = fields.Many2one('project.project')
|
||||
start_date = fields.Datetime(required=True)
|
||||
end_date = fields.Datetime(compute='_compute_end_date',store=True)
|
||||
fixed_amount = fields.Float()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_project_revenue_lines,access.project.revenue.lines,model_project_revenue_lines,,1,1,1,0
|
||||
access_project_revenue_wizard,access.project.revenue.wizard,model_project_revenue_wizard,,1,1,1,0
|
|
|
@ -0,0 +1,23 @@
|
|||
<odoo>
|
||||
<record id="view_edit_project_inherit_revenue" model="ir.ui.view">
|
||||
<field name="name"> project.edit.project.inherit</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='settings']" position="after">
|
||||
<page name="project_revenue_amount" string="Fixed Amount">
|
||||
<button name="%(action_project_revenue_wizard)d" string="Add Revenue" type="action" class="oe_highlight"/>
|
||||
<field name="revenue_amount_lines" context="{'project_id' : active_id}" readonly="1">
|
||||
<tree editable="bottom">
|
||||
<field name="project_id" invisible="1"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="fixed_amount"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
|
@ -0,0 +1 @@
|
|||
from . import project_revenue_wizard
|
|
@ -0,0 +1,44 @@
|
|||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError, AccessError, ValidationError
|
||||
from datetime import datetime
|
||||
from dateutil import relativedelta
|
||||
|
||||
|
||||
class CustomProjectWizard(models.TransientModel):
|
||||
_name = 'project.revenue.wizard'
|
||||
|
||||
project_id = fields.Many2one('project.project')
|
||||
start_date = fields.Datetime(required=True)
|
||||
end_date = fields.Datetime(compute='_compute_end_date', store=True)
|
||||
fixed_amount = fields.Float()
|
||||
|
||||
@api.depends('start_date')
|
||||
def _compute_end_date(self):
|
||||
for rec in self:
|
||||
if rec.start_date:
|
||||
rec.end_date = rec.start_date + relativedelta.relativedelta(months=1) - relativedelta.relativedelta(
|
||||
days=1)
|
||||
|
||||
def action_set_revenue_lines(self):
|
||||
values = {
|
||||
'project_id':self.project_id.id,
|
||||
'start_date':self.start_date,
|
||||
'end_date':self.end_date,
|
||||
'fixed_amount':self.fixed_amount
|
||||
}
|
||||
res = self.env['project.revenue.lines'].create(values)
|
||||
return res
|
||||
|
||||
@api.onchange('start_date')
|
||||
def _onchange_start_date(self):
|
||||
active_id = self._context.get('active_ids', [])
|
||||
project_object = self.env['project.project'].search([('id', '=', active_id[0])])
|
||||
records = self.env['project.revenue.lines'].sudo().search([('project_id', '=', project_object.id)])
|
||||
if self.start_date:
|
||||
if self.start_date.day != 1:
|
||||
raise AccessError('Please select first date of month')
|
||||
else:
|
||||
self.project_id = project_object.id
|
||||
for line in records:
|
||||
if self.start_date >= line.start_date and self.start_date <= line.end_date:
|
||||
raise AccessError('Date already exist')
|
|
@ -0,0 +1,30 @@
|
|||
<odoo>
|
||||
<record id="view_edit_project_wizard_revenue" model="ir.ui.view">
|
||||
<field name="name"> project.edit.project.inherit,wizard</field>
|
||||
<field name="model">project.revenue.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Project Revenue Wizard">
|
||||
<group>
|
||||
<group>
|
||||
<field name="project_id" readonly="1"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="fixed_amount"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="OK" type="object" name="action_set_revenue_lines" class="btn-primary"/>
|
||||
<button string="Cancel" class="btn-default" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_project_revenue_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Project Revenue wizard</field>
|
||||
<field name="res_model">project.revenue.wizard</field>
|
||||
<field name="view_id" ref="project_revenue_amount.view_edit_project_wizard_revenue"/>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{ 'default_project_id': active_id, 'project_id': active_id } </field>
|
||||
</record>
|
||||
</odoo>
|
Loading…
Reference in New Issue