oca / business-requirement Goto Github PK
View Code? Open in Web Editor NEWBusiness Requirements Management via Odoo
License: GNU Affero General Public License v3.0
Business Requirements Management via Odoo
License: GNU Affero General Public License v3.0
Currently: there is no total displayed at the bottom of the tree view for the revenue
Expected: display the total for the subset of records
Currently the Codecov coverage is not displayed for business-requirement repository at the bottom of the PR along Travis and Runbot.
How to make it active?
It was an experiment, but IMO it is horrible.
Do you agree?
When duplicating I get the following traceback:
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: 2017-03-21 04:05:18,710 249 ERROR elico_stable openerp.http: Exception during JSON request handling.
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: Traceback (most recent call last):
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 544, in _handle_exception
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return super(JsonRequest, self)._handle_exception(exception)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 581, in dispatch
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: result = self._call_function(**self.params)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 317, in _call_function
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return checked_call(self.db, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/service/model.py", line 118, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return f(dbname, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 314, in checked_call
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return self.endpoint(*a, **kw)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 810, in call
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return self.method(*args, **kw)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/http.py", line 410, in response_wrap
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: response = f(*args, **kw)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/addons/web/controllers/main.py", line 944, in call_kw
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return self._call_kw(model, method, args, kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/addons/web/controllers/main.py", line 936, in _call_kw
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return old_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 4917, in copy
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: new_id = self.create(cr, uid, data, context)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return old_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 372, in old_api
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: result = method(recs, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/additional_addons/business-requirement/business_requirement/models/business.py", line 190, in create
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return super(BusinessRequirement, self).create(vals)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return new_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 508, in new_api
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: result = method(self._model, cr, uid, *args, **old_kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/addons/mail/mail_thread.py", line 381, in create
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 268, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return old_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 372, in old_api
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: result = method(recs, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/additional_addons/connector/connector/producer.py", line 48, in create
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: record_id = create_original(self, vals)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return new_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 4126, in create
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: record = self.browse(self._create(old_vals))
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return new_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 508, in new_api
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: result = method(self._model, cr, uid, *args, **old_kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 4342, in _create
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: recs.recompute()
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/api.py", line 266, in wrapper
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return new_api(self, *args, **kwargs)
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 5795, in recompute
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: name: rec[name] for name in names
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 5795, in
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: name: rec[name] for name in names
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 5679, in getitem
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return self._fields[key].get(self, type(self))
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/fields.py", line 841, in get
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return record._cache[self]
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/models.py", line 6079, in getitem
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: return value.get() if isinstance(value, SpecialValue) else value
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: File "/opt/odoo/sources/odoo/openerp/fields.py", line 56, in get
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: raise self.exception
Mar 21 12:05:18 superman docker/stable_odoo-elico_1[806]: AccessError: ('AccessError', u'The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: business.requirement, Operation: read)')
BR name_get use format() built in Python lib and if some string is unicode will happen like this:
Apr 11 10:44:25 superman docker/trunk_odoo-elico_1[806]: File "/opt/odoo/additional_addons/business-requirement/business_requirement/models/business.py", line 256, in name_get
Apr 11 10:44:25 superman docker/trunk_odoo-elico_1[806]: formatted_name = '[{}] {}'.format(br.name, br.description)
Apr 11 10:44:25 superman docker/trunk_odoo-elico_1[806]: UnicodeEncodeError: 'ascii' codec can't encode characters in position 29-37: ordinal not in range(128
When trying to duplicate a BR I have the following error:
AccessError
The requested operation cannot be completed due to security restrictions. Please contact your system administrator.
(Document type: business.requirement, Operation: read)
A migration process was started a long time ago from v8 to v9.
In the meantime the whole structure of the files and strong improvements have been added to the v8 version of the module and v9 migration has been stopped.
Today the version of v8 is now stabilized and we will restart the migration process.
Current code is v9 is obsolete so I am wondering about the best course of action:
@dreispt @pedrobaeza @sudhir-serpentcs @seb-elico @victormartinelicocorp
Create a Earned Value Management Report to link the information from the BR with the one from the timesheets
module: business_requirement_earned_value
dependency: hr_timesheets, business_requirement_deliverable
Menu: Reporting / Project
Entry Name: Earned Value Management
Accessibility only to "BR Cost manager"
(*) based on all timesheets from tasks linked to the BR
(**) from the field remaining time of tasks related to the BR
Additional resources: http://www.brighthubpm.com/monitoring-projects/97906-calculating-earned-value/
This onchange might be a bit annoying when we come with context from another model and are creating a deliverable on the fly. If, from context, we had a description, and select a product, it replaces our text. If we change opinion and delete the selected product, we end up with an empty description, which is even more inconvenient, IMHO.
Is it ok if I create a PR to change this behavior? Any comments on anything I haven't thought of?
If i add a item in the "default resource line", in the product form, i get the error:
File "/odoo_test/parts/business-requirement/business_requirement_deliverable_cost/models/business.py", line 52, in _get_partner
if br_deliverable and br_deliverable.business_requirement_id:
UnboundLocalError: local variable 'br_deliverable' referenced before assignment
Expected is that when creating a new BR from a Master project, the followers from the master project are added to the BR.
Current behavior: no followers are added, only the BR creator.
Need to add Group By [Parent] in the BR tree view to allow users to get their BRs classified by Objectives for example.
Change when the button to generate the project appears. It should get displayed when the stage is set to Stakeholder approval (rename to Approved by Stakeholders).
Currently addons list is not updated in the README.md for branches v9.0 and v10.0.
It is updated properly in v8.0.
Is there a specific setup?
In BR Other Information tab, [Parent] many2one should display BR Description with the BR number as
[BR Number] Description
Currently project task creation is possible in approved state. Shouldn't we create tasks after stakeholder approval? What if he doesn't approve?
I am also confused about order of the states.
Current state order:
Draft -> Confirmed -> Approved -> Stakeholder Approval -> In Progress -> Done
If it's business requirements which is in progress, shouldn't it be before it is being confirmed?
Draft -> In Progress -> Confirmed -> Approved -> Stakeholder Approval -> Done
Maybe I didn't get what is meant by "in progress".
Thanks for the great module by the way.
Add Kanban view for the main BR menu.
The Kanban frame should contain (similar to task):
Name+description
Master Project
Tags
Priority (stars)
# hours in Timesheets (from task related gather the Time spent) / # hours in Resource lines (Time planned on all RL Task Type)
Tags
Responsible (Photo)
Links to (similar to project):
# tasks (to tree view with the Task related)
# hours (takes to Tree view with all the timesheets on liked task)
# document (Tree view with all Attachments)
By default, the columns should contain the BR stages.
Sorted by priority + sequence
Clicking on the unread sticker does not filter only by unread mails
Long story short, it's possible to generate multiple projects from 1 BR but there's only 1 field to store the generated project ("Linked Project").
Basically, when generating the projects from a BR, there are 4 options:
Ideally, each option should have its own way to store the link with the generated projects.
For now, I suggest the following:
br_id
: ID of the BR from which the project has been generateddl_id
: only in case of option 3, ID of the DL from which the project has been generatedTo be noted that there's a new feature under development to allow having RL directly attached to a BR (without having an intermediate DL). It's the same scenario as option 2.
As for the following scenario where we combine it with option 3, it's possible to implement it this way:
BR FOO (id=123)
> RL 1
> RL 2
> RL 3
> DL A (id=456)
> RL A1
> RL A2
> DL B (id=789)
> RL B1
> RL B2
> RL B3
If we select options 2 and 3, we would generate 3 projects:
FOO (br_id=123, dl_id=NULL)
> Task 1
> Task 2
> Task 3
A (br_id=123, dl_id=456)
> Task A1
> Task A2
B (br_id=123, dl_id=789)
> Task B1
> Task B2
> Task B3
Right now, the button disappears when you change the stage and only gets displayed on one stage.
Get the generate project button to display after the stakeholder approval as long as there is no project linked (See other the information tab for the field) (hide if a project is linked)
Task could have main Category by install https://github.com/OCA/project/tree/8.0/project_task_category
On business_requirement_deliverable_project when generate Task want to set this Category and create the Task with.
I would propose new module:
business_requierment_deliverable_project_main_category
depends on
business_requierment_deliverable_project
and
project_task_category
In order to improve the usability of current view design based form/sub-form/sub-subform we want to switch to a smart button related design where deliverable lines and Resources lines are open via smart buttons
Modify Business Requirement Menu:
- Possible views (first default): To Kanban View/Tree view/Form/Graph
- After Business Requirement add menus:
- Deliverables
- Possible views (first default): Kanban View/Tree view/Form/Graph
- Resources
- Possible views (first default): Kanban View/Tree view/Form/Graph
Correctly copy tax position while creating a quotation from a list of business requirements. Take the fiscal position of the customer set in the Business Requirement record.
Create a new menu action under the Business Requirement category menu to show BRs in a sequence view like "Products by Category" action under Products category menu under Sales root menu to show list of BRs sorted by Parents and "Reference" created in issue #45 .
Please check the following link before proceeding to the migration: https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-9.0
When you pick a module, input your github id and the PR number after the name of the module:
It would be great to have a Kanban state on the BR, same way we have it for the tasks.
The standards states should be enough:
For instance, a BR at stage "Confirmed" with Kanban state "ready for next step" means that it has been estimated and is waiting for approval. Whereas a "normal" one means that the estimation needs to be finalized.
Create ACL for a Reviewer and Estimator and allow to set the reviewer and estimator in the business requirement form by adding a many 2 many field in the model and in the form view (Employees or users in the drop down list) Allow to set more than one Reviewer and Estimator (many to many)
When I'm in Opportunities and I click on the button 'Quotation from Business Requirements' I get the following error:
Traceback (most recent call last):
File "/.repo_requirements/odoo/openerp/http.py", line 544, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/.repo_requirements/odoo/openerp/http.py", line 581, in dispatch
result = self._call_function(**self.params)
File "/.repo_requirements/odoo/openerp/http.py", line 317, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/.repo_requirements/odoo/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/.repo_requirements/odoo/openerp/http.py", line 314, in checked_call
return self.endpoint(*a, **kw)
File "/.repo_requirements/odoo/openerp/http.py", line 810, in call
return self.method(*args, **kw)
File "/.repo_requirements/odoo/openerp/http.py", line 410, in response_wrap
response = f(*args, **kw)
File "/root/odoo-8.0/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/root/odoo-8.0/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/.repo_requirements/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/.repo_requirements/odoo/openerp/api.py", line 399, in old_api
result = method(recs, *args, **kwargs)
File "/root/build/OCA/business-requirement/business_requirement_deliverable_crm/wizard/crm_make_sale.py", line 30, in make_orderline
order_lines = self.prepare_sale_order_line(case_id, order_id)
File "/root/build/OCA/business-requirement/business_requirement_deliverable_crm/wizard/crm_make_sale.py", line 43, in prepare_sale_order_line
make sale order!"""))
TypeError: init() takes exactly 2 arguments (3 given)
Group: "business_requirement_deliverable.group_business_requirement_estimation" should be able see button ""Update Prices on Resource Lines"
Also make sure could execute the action linked. ACL or sudo() just on the function
def action_button_update_estimation(self):
We need 2 stages like in previous version:
Currently only one (Cancel)
Following #80 (comment), we should add at DL the gross profit calculated fields
Add them to the DL as followed:
NB:
Current behavior
Group "Business Requirement Estimation" is defined in module business-requirement/business_requirement_deliverable_cost/
Expected behavior:
Group "Business Requirement Estimation" is defined in module business-requirement/business_requirement_deliverable/
In tree view following Columns should only be visible for this group in the model and all forms (tree/form):
This tab existed in previous version with following information:
Total Revenue (from deliverable)
Total cost for task (from resources)
Total cost for Procurement (from resources)
Total Gross Profit
https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-10.0
When you pick a module, input your github id and the PR number after the name of the module:
Link to the etherpad: http://pad.odoo.com/p/BR-codesprint-2016
Current behavior: When generating a project from a BR, the Master Project gets replaced by the generated project.
Expected behavior: Master Project of a BR must not change when generating the project.
I created #92 hoping it could solve the issue but Runbot wasn't working by then. Now I tested it and it doesn't fix the issue, unfortunately the PR has been merged already.
Currently, in BR screen, if we click the task smart button, it will not list the tasks related with this BR, but all tasks will be list.
actually, should just show this BR's tasks.
Add "Reference" (Text data type) field to the BR and show on the Tree (list) view and adjust issue #37 to show this "Reference" with the description as [Reference] Description. instead of [BR Number] Description
The price_total field is (now) defined in the module business_requirement_deliverable_cost, which is not a dependency of business_requirement_deliverable, where the field is referenced.
Wrong secret?
Because now RL and DL could be independent but if they are related between then should belong to same BR.
On the Resource Lines Form and Tree view should be not possible edit business_requirement_id
If business_requirement_deliverable_id is set
Add domain on Views to fix
readonly="{'business_requirement_deliverable_id', '!=', False}
On the Form Deliverable
if the business_requirement_id is edit then
should be updated the business_requirement_id on the related Resource Lines
if the Type = "task" and the Root Category for tasks and Assign to columns have values, then if we change the Type to "Procurement" values of the two columns are removed, But; when save and close the Deliverables lines then reopen it we find that the Root Category for tasks and Assign to columns will remain read only but will show their values as if the Type="task" while they should show nothing and being set to Null.
Currently, the fields of a BR are only editable when it's in Draft stage. It's conflicting with the workflow. As a reminder, here's the meaning of the stages:
Here's the matrix to summarize (V
= editable, X
= read-only):
Draft Confirmed Approved SH Appr. In prog.
Cust. Story V X X X X
Scenario V V X X X
Gap V V X X X
QA V V X X X
Deliverables V V X X X
Resources V V X X X
Assignee V V V V X
Instead of html editor, use etherpad, same feature as created for the tasks description, available for all 4 fields (CS/Sc/Gap/Test Case)
To be improved on base module BR or added on new module business_requirement_etherpad
Create a 3 BR reports including the following
To be added in br_deliverable_cost.
Measures should be:
Accessibility only to "BR Cost manager"
To be included in module br_deliverable.
Measures should be:
Accessibility only to "BR Sales Estimate"
To be included in the business_requirement_deliverable module:
Measures should be:
Accessibility only to "BR manager"
Make sure the linked project is emptied when you copy a Business Requirement (check if other fields would make sense to leave empty after a copy also).
Make sure that it is done for the other objects below the business requirements (resource lines, deliverable line items) if they are duplicated as well.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.