Changes in workflow and created related functions in mrp_repair

bzr revid: ruchakpatel@gmail.com-20081021091508-pqt7k19aqpik4hyc
This commit is contained in:
Rucha Patel
2008-10-21 14:45:08 +05:30
parent 1eb74a0bb8
commit 3d62f2b9da
2 changed files with 272 additions and 61 deletions
+88 -3
View File
@@ -125,9 +125,46 @@ class mrp_repair(osv.osv):
self.write(cr, uid, [o.id], {'state': 'confirmed'})
elif (o.invoice_method == 'b4repair'):
self.write(cr, uid, [o.id], {'state': '2binvoiced'})
elif (o.invoice_method == 'after_repair'):
self.write(cr, uid, [o.id], {'state': 'confirmed'})
self.pool.get('mrp.repair.lines').write(cr, uid, ids, {'state':'confirmed'})
return True
def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed','done']):
res = False
invoices = {}
invoice_ids = []
def action_confirm(self, cr, uid, ids, *args):
for o in self.browse(cr,uid,ids):
lines = []
for line in o.operations:
if (line.state in states) and not line.invoiced:
lines.append(line.id)
# created_lines = self.pool.get('sale.order.line').invoice_line_create(cr, uid, lines)
# if created_lines:
# invoices.setdefault(o.partner_id.id, []).append((o, created_lines))
picking_obj=self.pool.get('stock.picking')
for val in invoices.values():
if grouped:
res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x,y: x + y, [l for o,l in val], []))
for o,l in val:
self.write(cr, uid, [o.id], {'state' : 'progress'})
if o.order_policy=='picking':
picking_obj.write(cr,uid,map(lambda x:x.id,o.picking_ids),{'invoice_state':'invoiced'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%d,%d)', (o.id, res))
else:
for order, il in val:
res = self._make_invoice(cr, uid, order, il)
invoice_ids.append(res)
self.write(cr, uid, [order.id], {'state' : 'progress'})
if order.order_policy=='picking':
picking_obj.write(cr,uid,map(lambda x:x.id,order.picking_ids),{'invoice_state':'invoiced'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%d,%d)', (order.id, res))
return res
def action_ship_create(self, cr, uid, ids, *args):
picking_id=False
company = self.pool.get('res.users').browse(cr, uid, uid).company_id
for repair in self.browse(cr, uid, ids, context={}):
@@ -182,7 +219,7 @@ class mrp_repair(osv.osv):
})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.procurement', proc_id, 'button_confirm', cr)
self.pool.get('mrp.repair.lines').write(cr, uid, [line.id], {'procurement_id': proc_id})
elif line.product_id and line.product_id.product_tmpl_id.type=='service':
proc_id = self.pool.get('mrp.procurement').create(cr, uid, {
'name': line.name or 'Repair',
@@ -196,7 +233,7 @@ class mrp_repair(osv.osv):
})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.procurement', proc_id, 'button_confirm', cr)
self.pool.get('mrp.repair.lines').write(cr, uid, [line.id], {'procurement_id': proc_id})
else:
#
# No procurement because no product in the sale.order.line.
@@ -208,6 +245,54 @@ class mrp_repair(osv.osv):
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
self.write(cr, uid, [repair.id], val)
return True
def procurement_lines_get(self, cr, uid, ids, *args):
res = []
for order in self.browse(cr, uid, ids, context={}):
for line in order.operations:
if line.procurement_id:
res.append(line.procurement_id.id)
return res
def test_state(self, cr, uid, ids, mode, *args):
assert mode in ('finished', 'canceled'), _("invalid mode for test_state")
finished = True
canceled = False
write_done_ids = []
write_cancel_ids = []
for order in self.browse(cr, uid, ids, context={}):
for line in order.operations:
if line.procurement_id and (line.procurement_id.state != 'done') and (line.state!='done'):
finished = False
if line.procurement_id and line.procurement_id.state == 'cancel':
canceled = True
# if a line is finished (ie its procuremnt is done or it has not procuremernt and it
# is not already marked as done, mark it as being so...
if ((not line.procurement_id) or line.procurement_id.state == 'done') and line.state != 'done':
write_done_ids.append(line.id)
# ... same for canceled lines
if line.procurement_id and line.procurement_id.state == 'cancel' and line.state != 'cancel':
write_cancel_ids.append(line.id)
if write_done_ids:
self.pool.get('mrp.repair.lines').write(cr, uid, write_done_ids, {'state': 'done'})
if write_cancel_ids:
self.pool.get('mrp.repair.liness').write(cr, uid, write_cancel_ids, {'state': 'cancel'})
if mode=='finished':
return finished
elif mode=='canceled':
return canceled
def action_ship_end(self, cr, uid, ids, context={}):
for order in self.browse(cr, uid, ids):
val = {}
if (order.invoice_method=='after_repair'):
val['state'] = '2binvoiced'
else:
val['state'] = 'confirmed'
self.write(cr, uid, [order.id], val)
return True
mrp_repair()
+184 -58
View File
@@ -20,103 +20,229 @@
<field name="action">action_wait()</field>
<field name="split_mode">OR</field>
</record>
<record id="act_draft" model="workflow.activity">
<record id="act_wait_invoice" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="flow_start">True</field>
<field name="name">draft</field>
<field name="split_mode">OR</field>
<field name="name">wait_invoice</field>
</record>
<record id="act_confirmed" model="workflow.activity">
<record id="act_wait_ship" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">confirmed</field>
<field name="kind">function</field>
<field name="action">action_confirm()
write({'state':'confirmed'})</field>
</record>
<record id="act_2binvoiced" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">2binvoiced</field>
<field name="kind">function</field>
<field name="action">write({'state':'2binvoiced'})</field>
<field name="name">wait_ship</field>
</record>
<record id="act_done" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">done</field>
<field name="flow_stop">True</field>
<field name="kind">function</field>
<field name="action">write({'state':'done'})</field>
<field name="join_mode">AND</field>
</record>
<record id="act_done" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">done</field>
<field name="kind">function</field>
<field name="action">write({'state':'done'})</field>
</record>
<record id="act_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">cancel</field>
<field name="action">write({'state':'cancel'})</field>
<field name="flow_stop">True</field>
<field name="kind">stopall</field>
<field name="action">action_cancel()</field>
</record>
<record id="act_cancel2" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">cancel2</field>
<field name="flow_stop">True</field>
<field name="kind">stopall</field>
<field name="action">action_cancel()</field>
</record>
<record id="act_cancel3" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">cancel3</field>
<field name="flow_stop">True</field>
<field name="kind">stopall</field>
<field name="action">action_cancel()</field>
</record>
<record id="act_invoice" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">invoice</field>
<field name="kind">subflow</field>
<field name="subflow_id" search="[('name','=','account.invoice.basic')]"/>
<field name="action">action_invoice_create()</field>
</record>
<record id="act_invoice_except" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">invoice_except</field>
<field name="kind">function</field>
<field name="action">action_invoice_cancel()</field>
</record>
<record id="act_invoice_end" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">invoice_end</field>
<field name="kind">dummy</field>
</record>
<record id="act_invoice_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">invoice_cancel</field>
<field name="flow_stop">True</field>
<field name="kind">stopall</field>
<field name="action">action_cancel()</field>
</record>
<record id="act_ship" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">ship</field>
<field name="kind">function</field>
<field name="action">action_ship_create()</field>
</record>
<record id="act_ship_except" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">ship_except</field>
<field name="kind">function</field>
<field name="action">write({'state':'shipping_except'})</field>
</record>
<record id="act_ship_end" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">ship_end</field>
<field name="kind">function</field>
<field name="action">action_ship_end()</field>
</record>
<record id="act_ship_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_repair"/>
<field name="name">ship_cancel</field>
<field name="flow_stop">True</field>
<field name="kind">stopall</field>
<field name="action">action_cancel()</field>
</record>
<!-- Transistion -->
<record id="trans_invoice_end_done" model="workflow.transition">
<field name="act_from" ref="act_invoice_end"/>
<field name="act_to" ref="act_done"/>
</record>
<record id="trans_draft_router" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_router"/>
<field name="signal">repair_confirm</field>
</record>
<record id="trans_router_confirmed" model="workflow.transition">
<field name="act_from" ref="act_router"/>
<field name="act_to" ref="act_confirmed"/>
<field name="condition">(invoice_method=='none')</field>
</record>
<record id="trans_router_2binvoiced" model="workflow.transition">
<field name="act_from" ref="act_router"/>
<field name="act_to" ref="act_2binvoiced"/>
<field name="condition">(invoice_method=='b4repair')</field>
</record>
<record id="trans_confirm_2binvoiced" model="workflow.transition">
<field name="act_from" ref="act_confirmed"/>
<field name="act_to" ref="act_2binvoiced"/>
<field name="condition">(invoice_method=='after_repair')</field>
</record>
<record id="trans_draft_cancel" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel</field>
</record>
<record id="trans_confirmed_done" model="workflow.transition">
<field name="act_from" ref="act_confirmed"/>
<field name="act_to" ref="act_done"/>
<field name="signal">repair_done</field>
<record id="trans_wait_invoice_all_lines_invoiced" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_invoice_end"/>
<field name="signal">all_lines</field>
</record>
<record id="trans_confirmed_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirmed"/>
<field name="act_to" ref="act_cancel"/>
<record id="trans_router_wait_invoice_shipping" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_invoice_end"/>
<field name="condition">True</field>
</record>
<record id="trans_router_wait_invoice" model="workflow.transition">
<field name="act_from" ref="act_router"/>
<field name="act_to" ref="act_wait_invoice"/>
</record>
<record id="trans_router_wait_ship" model="workflow.transition">
<field name="act_from" ref="act_router"/>
<field name="act_to" ref="act_wait_ship"/>
</record>
<record id="trans_wait_invoice_cancel2" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_cancel2"/>
<field name="signal">cancel</field>
</record>
<record id="trans_2binvoiced_done" model="workflow.transition">
<field name="act_from" ref="act_2binvoiced"/>
<field name="act_to" ref="act_done"/>
<field name="signal">make_invoice</field>
<record id="trans_wait_ship_cancel3" model="workflow.transition">
<field name="act_from" ref="act_wait_ship"/>
<field name="act_to" ref="act_cancel3"/>
<field name="signal">cancel</field>
</record>
<record id="trans_2binvoiced_cancel" model="workflow.transition">
<field name="act_from" ref="act_2binvoiced"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">cancel</field>
<record id="trans_wait_ship_ship" model="workflow.transition">
<field name="act_from" ref="act_wait_ship"/>
<field name="act_to" ref="act_ship"/>
<field name="condition">(invoice_method=='after_repair' or invoice_method=='none')</field>
</record>
<record id="trans_wait_invoice_invoice" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_invoice"/>
<field name="condition">(invoice_method=='b4repair')</field>
</record>
<record id="trans_wait_invoice_invoice_manual" model="workflow.transition">
<field name="act_from" ref="act_wait_invoice"/>
<field name="act_to" ref="act_invoice"/>
<field name="signal">manual_invoice</field>
</record>
<record id="trans_invoice_invoice_end" model="workflow.transition">
<field name="act_from" ref="act_invoice"/>
<field name="act_to" ref="act_invoice_end"/>
<field name="signal">subflow.paid</field>
</record>
<record id="trans_invoice_invoice_except" model="workflow.transition">
<field name="act_from" ref="act_invoice"/>
<field name="act_to" ref="act_invoice_except"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="trans_invoice_except_invoice" model="workflow.transition">
<field name="act_from" ref="act_invoice_except"/>
<field name="act_to" ref="act_invoice"/>
<field name="signal">invoice_recreate</field>
</record>
<record id="trans_invoice_except_invoice_end" model="workflow.transition">
<field name="act_from" ref="act_invoice_except"/>
<field name="act_to" ref="act_invoice_end"/>
<field name="signal">invoice_corrected</field>
</record>
<record id="trans_invoice_except_invoice_cancel" model="workflow.transition">
<field name="act_from" ref="act_invoice_except"/>
<field name="act_to" ref="act_invoice_cancel"/>
<field name="signal">invoice_cancel</field>
</record>
<record id="trans_ship_end_done" model="workflow.transition">
<field name="act_from" ref="act_ship_end"/>
<field name="act_to" ref="act_done"/>
</record>
<record id="trans_ship_ship_end" model="workflow.transition">
<field name="act_from" ref="act_ship"/>
<field name="act_to" ref="act_ship_end"/>
<field name="trigger_model">mrp.procurement</field>
<field name="trigger_expr_id">procurement_lines_get()</field>
<field name="condition">test_state('finished')</field>
</record>
<record id="trans_ship_ship_except" model="workflow.transition">
<field name="act_from" ref="act_ship"/>
<field name="act_to" ref="act_ship_except"/>
<!--
<field name="trigger_model">mrp.procurement</field>
<field name="trigger_expr_id">procurement_lines_get()</field>
-->
<field name="condition">test_state('canceled')</field>
</record>
<record id="trans_ship_except_ship" model="workflow.transition">
<field name="act_from" ref="act_ship_except"/>
<field name="act_to" ref="act_ship"/>
<field name="signal">ship_recreate</field>
</record>
<record id="trans_ship_except_ship_end" model="workflow.transition">
<field name="act_from" ref="act_ship_except"/>
<field name="act_to" ref="act_ship_end"/>
<field name="signal">ship_corrected</field>
</record>
<record id="trans_ship_except_ship_cancel" model="workflow.transition">
<field name="act_from" ref="act_ship_except"/>
<field name="act_to" ref="act_ship_cancel"/>
<field name="signal">ship_cancel</field>
</record>
</data>