eLBati ha scritto:enlightx ha scritto:Comunque, quell'argomento è trattato sul manuale MRP che puoi trovare nella sezione download di openerp-italia.org nella documentazione.
Ovvero qui
http://www.openerp-italia.org/index.php?option=com_jdownloads&Itemid=72&task=viewcategory&catid=8
Ho già dato una lettura veloce alla documentazione e purtroppo non copre quel caso particolare che, in sintesi:
1) crea un progetto alla conferma di un SO con prodotti di tipo Service (il flusso originale crea solo i task)
2) verifica se il prodotto ha una BOM (utile per me per ipotizzare di gestire servizi configurabili, ad es: numero di interventi) e in tal caso crea dei sotto-progetti con i relativi sotto-task.
Se vi può essere utile, ho contattato l'autore del post via PM e mi ha appena risposto con la seguente patch:
Index: bin/addons/project/mrp.py
===================================================================
--- bin/addons/project/mrp.py (revision 1129)
+++ bin/addons/project/mrp.py (working copy)
@@ -35,16 +35,56 @@
def action_produce_assign_service(self, cr, uid, ids, context={}):
for procurement in self.browse(cr, uid, ids):
+ # Firstly find if the project for this sale exists
+ # if not create a project for this sale.order
+ project_ids = self.pool.get('project.project').search(cr, uid, [
+ ('name', 'like', procurement.origin)
+ ])
+ if not len(project_ids):
+ project_id = self.pool.get('project.project').create(cr, uid, {
+ 'name': procurement.origin
+ })
+ else:
+ project_id = project_ids[0]
+
+ # Check if this service have a BoM (bom._find)
+ bom = self.pool.get('mrp.bom').search(cr, uid, [
+ ('product_id', '=', procurement.product_id.id)
+ ])
+ if bom and len(bom):
+ # Have a BoM
+ # create a subproject for this BoM
+ subproject_id = self.pool.get('project.project').create(cr, uid, {
+ 'name': procurement.product_id.name,
+ 'parent_id': project_id
+ })
+ properties = [x.id for x in procurement.property_ids]
+ bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id,\
+ procurement.product_uom.id, properties)
+ for p in self.pool.get('mrp.bom').browse(cr, uid, bom_id).bom_lines:
+ task_id = self.pool.get('project.task').create(cr, uid, {
+ 'name': p.product_id.name,
+ 'date_deadline': procurement.date_planned,
+ 'state': 'open',
+ 'planned_hours': procurement.product_qty,
+ 'user_id': p.product_id.product_manager.id,
+ 'notes': procurement.origin,
+ 'procurement_id': procurement.id,
+ 'project_id': subproject_id
+ })
+ else:
+ # Simply create the task in the project
+ task_id = self.pool.get('project.task').create(cr, uid, {
+ 'name': procurement.product_id.name,
+ 'date_deadline': procurement.date_planned,
+ 'state': 'open',
+ 'planned_hours': procurement.product_qty,
+ 'user_id': procurement.product_id.product_manager.id,
+ 'notes': procurement.origin,
+ 'procurement_id': procurement.id,
+ 'project_id': project_id
+ })
self.write(cr, uid, [procurement.id], {'state':'running'})
- task_id = self.pool.get('project.task').create(cr, uid, {
- 'name': procurement.name,
- 'date_deadline': procurement.date_planned,
- 'state': 'open',
- 'planned_hours': procurement.product_qty,
- 'user_id': procurement.product_id.product_manager.id,
- 'notes': procurement.origin,
- 'procurement_id': procurement.id
- })
- return task_id
+ return project_id
mrp_procurement()
Ciao
Marco