diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py
index 44ec02f..7e1ec8f 100755
--- a/cor_custom/models/project.py
+++ b/cor_custom/models/project.py
@@ -38,6 +38,8 @@ class Project(models.Model):
" them or by someone of their company.")
allow_billable = fields.Boolean("Billable", default=True, help="Invoice your time and material from tasks.")
+ start_date = fields.Date(string='Start Date')
+ end_date = fields.Date(string='End Date')
budgeted_hours = fields.Float(string='Total Budgeted Hours', digits=(16, 2))
budgeted_revenue = fields.Float(string='Budgeted Revenue', digits=(16, 2))
expenses_per = fields.Float(string='Expenses (%)', digits=(16, 2))
@@ -52,6 +54,11 @@ class Project(models.Model):
profit_per = fields.Float(string='Porfit Percentage', digits=(16, 2), compute='_compute_calc', store=True)
+
+ _sql_constraints = [
+ ('end_date_greater', 'check(end_date >= start_date)', 'Error ! Ending Date cannot be set before Beginning Date.')
+ ]
+
@api.onchange('budgeted_revenue', 'expenses_per')
def onchange_expenses_per(self):
if self.budgeted_revenue > 0 and self.expenses_per > 0:
diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml
index c998706..396c38a 100755
--- a/cor_custom/views/project_view.xml
+++ b/cor_custom/views/project_view.xml
@@ -39,6 +39,8 @@
widget="radio"/>
+
+
diff --git a/project_report/report/project_budget_amt_analysis.py b/project_report/report/project_budget_amt_analysis.py
index 078e7f1..898478f 100755
--- a/project_report/report/project_budget_amt_analysis.py
+++ b/project_report/report/project_budget_amt_analysis.py
@@ -25,18 +25,18 @@ class BudgetAmtAnalysis(models.Model):
tools.drop_view_if_exists(self._cr, self._table)
self._cr.execute("""
CREATE OR REPLACE VIEW %s AS (
- SELECT
+ SELECT ROW_NUMBER() OVER() as id, project_id, partner_id, amount_type, revenue from (
+ SELECT
row_number() OVER() AS id,
PRO.id AS project_id,
PRO.create_date AS create_date,
PRO.partner_id AS partner_id,
'Budgeted Revenue' as amount_type,
PRO.budgeted_revenue AS revenue
- --SO.amount_total AS actual_revenue
FROM project_project PRO
LEFT JOIN sale_order SO ON PRO.sale_order_id = SO.id
- LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id
- LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = PRO.id
+ --LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id
+ --LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = PRO.id
WHERE PRO.active = 't' and PRO.pricing_type!='fixed_rate'
group by Pro.id, PRO.partner_id, Pro.budgeted_revenue, so.amount_total
union
@@ -46,14 +46,14 @@ class BudgetAmtAnalysis(models.Model):
PRO.create_date AS create_date,
PRO.partner_id AS partner_id,
'Actual Revenue' as amount_type,
- SO.amount_total AS revenue
+ sum(AAL.amount * -1) + pro.total_expenses AS revenue
FROM project_project PRO
LEFT JOIN sale_order SO ON PRO.sale_order_id = SO.id
LEFT JOIN account_analytic_account AA ON PRO.analytic_account_id = AA.id
LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = PRO.id
WHERE PRO.active = 't' and PRO.pricing_type!='fixed_rate'
group by Pro.id, PRO.partner_id, Pro.budgeted_revenue, so.amount_total
- order by create_date desc, project_id, amount_type desc
+ order by create_date desc, project_id, amount_type desc) as res
)""" % (self._table,))
diff --git a/project_report/report/project_budget_hrs_analysis.py b/project_report/report/project_budget_hrs_analysis.py
index b2ade6e..1409d0a 100755
--- a/project_report/report/project_budget_hrs_analysis.py
+++ b/project_report/report/project_budget_hrs_analysis.py
@@ -15,8 +15,9 @@ class BudgetHrsAnalysis(models.Model):
project_id = fields.Many2one('project.project', string='Project', readonly=True)
partner_id = fields.Many2one('res.partner', string='Client', readonly=True)
employee_id = fields.Many2one('hr.employee', string='Employee', readonly=True)
- hours_type = fields.Char(string="Hours Type")
+ hours_type = fields.Char(string="Hours Type", readonly=True)
hours = fields.Float("Hours", digits=(16, 2), readonly=True, group_operator="sum")
+
#budgeted_hours = fields.Float("Budgeted Hours", digits=(16, 2), readonly=True, group_operator="sum")
#actual_hours = fields.Float("Actual Hours", digits=(16, 2), readonly=True, group_operator="sum")
@@ -25,39 +26,71 @@ class BudgetHrsAnalysis(models.Model):
tools.drop_view_if_exists(self._cr, self._table)
self._cr.execute("""
CREATE OR REPLACE VIEW %s AS (
- SELECT row_number() OVER() AS id,
- PRO.id AS project_id,
- PRO.create_date AS create_date,
- PRO.partner_id AS partner_id,
- Pro_emp.employee_id AS employee_id,
- 'Budgeted Hours' as hours_type,
- CASE
- WHEN Pro_emp.id is null THEN Pro.budgeted_hours
- ELSE Pro_emp.budgeted_qty
- END AS hours
- FROM project_project PRO
- Left JOIN project_sale_line_employee_map Pro_emp ON Pro_emp.project_id = Pro.id
- LEFT JOIN account_analytic_account AA ON Pro.analytic_account_id = AA.id
- LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = Pro.id
- and AAL.employee_id = Pro_emp.employee_id
- Where PRO.active = 't' and PRO.pricing_type!='fixed_rate'
- group by Pro.id, Pro_emp.id, PRO.partner_id, Pro_emp.employee_id, AAL.unit_amount
+ SELECT ROW_NUMBER() OVER() as id, project_id, partner_id, employee_id, hours_type, hours from (
+ SELECT
+ PRO.id AS project_id,
+ PRO.create_date AS create_date,
+ PRO.partner_id AS partner_id,
+ null AS employee_id,
+ 'Budgeted Hours' as hours_type,
+ PRO.budgeted_hours AS hours
+ FROM
+ project_project PRO
+ --LEFT JOIN account_analytic_account AA ON Pro.analytic_account_id = AA.id
+ --LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id
+ --and AAL.project_id = Pro.id
+ Where
+ PRO.active = 't'
+ and PRO.pricing_type != 'fixed_rate'
+ and PRO.project_type = 'hours_no_limit'
Union
- SELECT row_number() OVER() AS id,
- PRO.id AS project_id,
- PRO.create_date AS create_date,
- PRO.partner_id AS partner_id,
- Pro_emp.employee_id AS employee_id,
- 'Actual Hours' as hours_type,
- sum(AAL.unit_amount) AS hours
- FROM project_project PRO
- Left JOIN project_sale_line_employee_map Pro_emp ON Pro_emp.project_id = Pro.id
- LEFT JOIN account_analytic_account AA ON Pro.analytic_account_id = AA.id
- LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = Pro.id
- and AAL.employee_id = Pro_emp.employee_id
- Where PRO.active = 't' and PRO.pricing_type!='fixed_rate'
- group by Pro.id, Pro_emp.id, PRO.partner_id, Pro_emp.employee_id, AAL.unit_amount
- order by create_date desc, project_id, employee_id, hours_type desc
+ SELECT
+ PRO.id AS project_id,
+ PRO.create_date AS create_date,
+ PRO.partner_id AS partner_id,
+ Pro_emp.employee_id AS employee_id,
+ 'Budgeted Hours' as hours_type,
+ Pro_emp.budgeted_qty as hours
+ FROM
+ project_project PRO
+ Left JOIN project_sale_line_employee_map Pro_emp ON Pro_emp.project_id = Pro.id
+ LEFT JOIN account_analytic_account AA ON Pro.analytic_account_id = AA.id
+ LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id
+ and AAL.project_id = Pro.id
+ Where
+ PRO.active = 't'
+ and PRO.pricing_type != 'fixed_rate'
+ and PRO.project_type = 'hours_in_consultant'
+ Union
+ SELECT
+ PRO.id AS project_id,
+ PRO.create_date AS create_date,
+ PRO.partner_id AS partner_id,
+ AAL.employee_id AS employee_id,
+ 'Actual Hours' as hours_type,
+ sum(AAL.unit_amount) AS hours
+ FROM
+ project_project PRO
+ Left JOIN project_sale_line_employee_map Pro_emp ON Pro_emp.project_id = Pro.id
+ LEFT JOIN account_analytic_account AA ON Pro.analytic_account_id = AA.id
+ LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id
+ and AAL.project_id = Pro.id
+ --and AAL.employee_id = Pro_emp.employee_id
+ Where
+ PRO.active = 't'
+ and PRO.pricing_type != 'fixed_rate'
+ group by
+ Pro.id,
+ --Pro_emp.id,
+ --PRO.partner_id,
+ AAL.employee_id,
+ AAL.unit_amount,
+ hours_type
+ ) as res
+ order by
+ project_id desc,
+ hours_type asc,
+ employee_id
)""" % (self._table,))