def action_revert_done(self): for picking in self: # only in incoming pickings if picking.picking_type_code != 'incoming': raise exceptions.Warning( _('Picking %s is not incoming. ' 'Only valid in incoming pickings.') % (picking.name)) if not picking.has_revert_picking(): raise exceptions.Warning( _('Picking %s is not reverted: ' 'revert it first.') % (picking.name)) if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id and picking.invoice_id.state != 'cancel': raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id or picking.invoice_id.state == 'cancel': picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def _line_purge_workflows(self, line): """ Delete workflow items of model in line to be purged. """ # Use shortcut to obtain all records in model with a workflow in # progress directly from the workflow work-item table. Then, delete # the workflow using normal workflow method. self.env.cr.execute( """ SELECT res_id FROM wkf_instance WHERE res_type = '%s' """ % (line.model_name,) ) model_ids = [data[0] for data in self.env.cr.fetchall()] for res_id in model_ids: workflow.trg_delete( self.env.uid, line.model_name, res_id, self.env.cr ) self.logger.info( _('Removed %s workflows in progress referencing model %s') % (len(model_ids), line.model_name)) return
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow for transaction in self.browse(cr, uid, ids): state = transaction.state role_to_test = 'is_sender' if state == 'done': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete( uid, 'exchange.transaction', transaction.id, cr ) workflow.trg_create( uid, 'exchange.transaction', transaction.id, cr ) if state == 'done': skip_confirm = self.get_skip_confirm(cr, uid, transaction) if not skip_confirm: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_draft_confirm_refund', cr ) else: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_done_cancel_through_draft', cr ) return True
def test_vote(self, cr, uid, ids, context=None): # Check the votes, to know if all required votes are made and if we can close the proposition transaction_obj = self.pool.get('account.wallet.transaction') vote_obj = self.pool.get('vote.vote') for proposition in self.browse(cr, uid, ids, context=context): vote_user = False vote_announcer = False user_partner_id = proposition.sender_id.id announcer_partner_id = proposition.receiver_id.id vote_ids = vote_obj.search( cr, uid, [('model', '=', 'marketplace.proposition'), ('res_id', '=', proposition.id), ('partner_id', 'in', [user_partner_id, announcer_partner_id]) ], context=context) for vote in vote_obj.browse(cr, uid, vote_ids, context=context): if vote.partner_id.id == user_partner_id: vote_user = vote if vote.partner_id.id == announcer_partner_id: vote_announcer = vote if vote_user and vote_user.is_complete and vote_announcer and vote_announcer.is_complete: workflow.trg_validate(uid, 'marketplace.proposition', proposition.id, 'proposition_vote_paid', cr) transaction_obj.write(cr, uid, [proposition.transaction_id.id], {'state': 'done'}, context=context) workflow.trg_delete(uid, 'account.wallet.transaction', proposition.transaction_id.id, cr)
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): state = proposition.state role_to_test = 'is_user' if state == 'rejected': role_to_test = 'is_announcer' elif state == 'paid': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) if state in ['cancel', 'rejected', 'paid']: workflow.trg_delete(uid, 'marketplace.proposition', proposition.id, cr) workflow.trg_create(uid, 'marketplace.proposition', proposition.id, cr) if state == 'paid': skip_confirm = transaction_obj.get_skip_confirm( cr, uid, proposition.transaction_id) if not skip_confirm: workflow.trg_validate(uid, 'marketplace.proposition', proposition.id, 'proposition_draft_confirm_refund', cr) else: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_paid_cancel_through_draft', cr) return True
def change_state(self, cr, uid, ids, new_state, *args): # Called by workflow, launch needed action depending of the next state announcement_obj = self.pool.get('marketplace.announcement') transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): fields = {'state': new_state} if new_state == 'open': if proposition.quantity > \ proposition.announcement_id.quantity_available and not proposition.announcement_id.infinite_qty: raise osv.except_osv(_('Access error!'), _("There is not enough quantity available!")) transaction_obj.write(cr, uid, [proposition.transaction_id.id], {'state': 'draft'}) workflow.trg_delete(uid, 'account.wallet.transaction', proposition.transaction_id.id, cr) fields['already_published'] = True if new_state == 'accepted': transaction_obj.prepare_move(cr, uid, [proposition.transaction_id.id], 'reservation') announcement_obj.test_close(cr, uid, [proposition.announcement_id.id]) fields['already_accepted'] = True if new_state == 'invoiced': transaction_obj.prepare_move(cr, uid, [proposition.transaction_id.id], 'invoice') if new_state == 'cancel': transaction_obj.refund( cr, uid, [proposition.transaction_id.id], ['reservation', 'invoice', 'payment', 'confirm'] ) transaction_obj.write(cr, uid, [proposition.transaction_id.id], {'state': 'cancel'}) workflow.trg_delete(uid, 'account.wallet.transaction', proposition.transaction_id.id, cr) self.write(cr, SUPERUSER_ID, [proposition.id], fields) if new_state == 'accepted': announcement_obj.test_close(cr, uid, [proposition.announcement_id.id])
def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) for distinta_id in ids: workflow.trg_delete(uid, 'riba.distinta', distinta_id, cr) workflow.trg_create(uid, 'riba.distinta', distinta_id, cr) return True
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending of the next state and reset the workflow transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): state = proposition.state role_to_test = 'is_user' if state == 'rejected': role_to_test = 'is_announcer' elif state == 'paid': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete(uid, 'marketplace.proposition', proposition.id, cr) workflow.trg_create(uid, 'marketplace.proposition', proposition.id, cr) if state == 'paid': skip_confirm = transaction_obj.get_skip_confirm(cr, uid, proposition.transaction_id) if not skip_confirm: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_draft_confirm_refund', cr ) else: workflow.trg_validate( uid, 'marketplace.proposition', proposition.id, 'proposition_paid_cancel_through_draft', cr ) return True
def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state':'draft'}) for distinta_id in ids: workflow.trg_delete(uid, 'riba.distinta', distinta_id, cr) workflow.trg_create(uid, 'riba.distinta', distinta_id, cr) return True
def test_vote(self, cr, uid, ids, context=None): # Check the votes, to know if all required votes are made and if we can close the proposition transaction_obj = self.pool.get('account.wallet.transaction') vote_obj = self.pool.get('vote.vote') for proposition in self.browse(cr, uid, ids, context=context): vote_user = False vote_announcer = False user_partner_id = proposition.sender_id.id announcer_partner_id = proposition.receiver_id.id vote_ids = vote_obj.search( cr, uid, [ ('model', '=', 'marketplace.proposition'), ('res_id', '=', proposition.id), ('partner_id', 'in', [user_partner_id, announcer_partner_id]) ], context=context) for vote in vote_obj.browse(cr, uid, vote_ids, context=context): if vote.partner_id.id == user_partner_id: vote_user = vote if vote.partner_id.id == announcer_partner_id: vote_announcer = vote if vote_user and vote_user.is_complete and vote_announcer and vote_announcer.is_complete: workflow.trg_validate(uid, 'marketplace.proposition', proposition.id, 'proposition_vote_paid', cr) transaction_obj.write(cr, uid, [proposition.transaction_id.id], {'state': 'done'}, context=context) workflow.trg_delete(uid, 'account.wallet.transaction', proposition.transaction_id.id, cr)
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending # of the next state and reset the workflow for transaction in self.browse(cr, uid, ids): state = transaction.state role_to_test = 'is_sender' if state == 'done': role_to_test = 'is_receiver' self.test_access_role(cr, uid, ids, role_to_test, *args) workflow.trg_delete(uid, 'exchange.transaction', transaction.id, cr) workflow.trg_create(uid, 'exchange.transaction', transaction.id, cr) if state == 'done': skip_confirm = self.get_skip_confirm(cr, uid, transaction) if not skip_confirm: workflow.trg_validate(uid, 'exchange.transaction', transaction.id, 'transaction_draft_confirm_refund', cr) else: workflow.trg_validate( uid, 'exchange.transaction', transaction.id, 'transaction_done_cancel_through_draft', cr) return True
def action_cancel_draft(self): for riba_list in self: workflow.trg_delete(self.env.user.id, 'riba.distinta', riba_list.id, self._cr) workflow.trg_create(self.env.user.id, 'riba.distinta', riba_list.id, self._cr) riba_list.state = 'draft' riba_list.line_ids.state = 'draft'
def change_done_pending(self,cr,uid,ids,context=None): self.write(cr,SUPERUSER_ID,ids,{'state':'pending','submitted_by':False},context) attendance = self.pool.get('attendance.attendance') for line in self.browse(cr,uid,ids,context): workflow.trg_delete(SUPERUSER_ID, 'attendance.line', line.id, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.line', line.id, cr) if line.attendance_id.state == "submitted": #if the attendance record workflow is finished then reset it attendance.reset_workflow(cr,uid,line.attendance_id.id,context=context) return True
def change_state(self, cr, uid, ids, new_state, *args): # Called by workflow, launch needed action depending of the next state announcement_obj = self.pool.get('marketplace.announcement') transaction_obj = self.pool.get('account.wallet.transaction') for proposition in self.browse(cr, uid, ids): fields = {'state': new_state} if proposition.state == 'draft' and new_state == 'open': if proposition.quantity > \ proposition.announcement_id.quantity_available \ and not proposition.announcement_id.infinite_qty: raise osv.except_osv( _('Access error!'), _( "There is not enough quantity available!" ) ) transaction_obj.write( cr, uid, [proposition.transaction_id.id], {'state': 'draft'} ) workflow.trg_delete( uid, 'account.wallet.transaction', proposition.transaction_id.id, cr ) fields['already_published'] = True if proposition.state == 'open' and new_state == 'accepted': transaction_obj.prepare_move( cr, uid, [proposition.transaction_id.id], 'reservation' ) announcement_obj.test_close( cr, uid, [proposition.announcement_id.id] ) fields['already_accepted'] = True if proposition.state == 'accepted' and new_state == 'invoiced': transaction_obj.prepare_move( cr, uid, [proposition.transaction_id.id], 'invoice' ) if new_state == 'cancel': transaction_obj.refund( cr, uid, [proposition.transaction_id.id], ['reservation', 'invoice', 'payment', 'confirm'] ) transaction_obj.write( cr, uid, [proposition.transaction_id.id], {'state': 'cancel'} ) workflow.trg_delete( uid, 'account.wallet.transaction', proposition.transaction_id.id, cr ) self.write(cr, SUPERUSER_ID, [proposition.id], fields) if new_state == 'accepted': announcement_obj.test_close( cr, uid, [proposition.announcement_id.id] )
def reset_workflow(self, cr, uid, ids, *args): # Called by workflow, launch needed action depending of the next state and reset the workflow self.test_access_role(cr, uid, ids, 'is_user', *args) for announcement in self.browse(cr, uid, ids): state = announcement.state self.write(cr, uid, [announcement.id], {'state': 'draft'}) workflow.trg_delete(uid, 'marketplace.announcement', announcement.id, cr) workflow.trg_create(uid, 'marketplace.announcement', announcement.id, cr) if state == 'done': workflow.trg_validate(uid, 'marketplace.announcement', announcement.id, 'announcement_draft_open', cr) return True
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def action_cancel_draft(self): lines = self.env['sale.order.line'].\ search([ ('order_id', 'in', self.ids), ('state', '=', 'cancel'), ]) self.write({ 'state': 'draft', 'invoice_ids': [(6, 0, [])], 'shipped': 0, }) lines.write({ 'invoiced': False, 'state': 'draft', 'invoice_lines': [(6, 0, [])], }) for sale in self: # Deleting the existing instance of workflow for SO workflow.trg_delete(self._uid, 'sale.order', sale.id, self._cr) workflow.trg_create(self._uid, 'sale.order', sale.id, self._cr) return True
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) for move in picking.move_lines: for quant in move.quant_ids: if move.location_id.id == quant.location_id.id: quant.qty += move.product_uom_qty elif move.location_dest_id.id == quant.location_id.id: quant.qty -= move.product_uom_qty move.procurement_id.write({'state': 'exception'}) picking.move_lines.write({'state': 'draft'}) picking.pack_operation_ids.unlink() picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) if picking.sale_id: picking.sale_id.write({'state': 'progress'}) instance = self.env['workflow.instance'].search([ ('res_type', '=', 'sale.order'), ('res_id', '=', picking.sale_id.id) ]) instance.state = 'active' for item in self.env['workflow.workitem'].search([ ('inst_id', '=', instance.id) ]): item.state = 'active' return
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('Picking %s has valuation moves: ' 'remove them first.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('Picking %s has invoices!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete( self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create( self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("The picking has been re-opened and set to draft state")) return
def action_revert_done(self): for picking in self: if picking.has_valuation_moves(): raise exceptions.Warning( _('La orden de entrega %s tiene movimientos: ' 'eliminelos primero.') % (picking.name)) if picking.invoice_id: raise exceptions.Warning( _('La orden de entrega %s esta facturada!') % (picking.name)) picking.move_lines.write({'state': 'draft'}) picking.state = 'draft' if picking.invoice_state == 'invoiced' and not picking.invoice_id: picking.invoice_state = '2binvoiced' # Deleting the existing instance of workflow workflow.trg_delete(self._uid, 'stock.picking', picking.id, self._cr) workflow.trg_create(self._uid, 'stock.picking', picking.id, self._cr) picking.message_post( _("La orden de entrega se rehizo, convirtiendose en estado borrador" )) return
# -*- coding: utf-8 -*-
def change_done_pending(self,cr,uid,ids,context=None): self.write(cr,uid,ids,{'state':'pending'},context) for attendance in ids: workflow.trg_delete(SUPERUSER_ID, 'attendance.attendance', attendance, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.attendance', attendance, cr) return True
def reset_workflow(self,cr,uid,id,context): workflow.trg_delete(SUPERUSER_ID, 'attendance.attendance', id, cr) workflow.trg_create(SUPERUSER_ID, 'attendance.attendance', id, cr) return True
def action_reopen(self, cr, uid, ids, context=None): """ Changes SO state to draft. @return: True """ _logger = logging.getLogger(__name__) _logger.debug('FGF sale_order action reopen %s' % (ids)) self.allow_reopen(cr, uid, ids, context=None) order_line_obj = self.pool.get('sale.order.line') po_line_obj = self.pool.get('purchase.order.line') move_obj = self.pool.get('stock.move') invoice_obj = self.pool.get('account.invoice') context.update({'cancel_procurement': True}) for order in self.browse(cr, uid, ids, context=context): proc_group_id = order.procurement_group_id if proc_group_id: #Raise warning if PO/MO is confirmed for proc in proc_group_id.procurement_ids: if proc.purchase_id and proc.purchase_id.state not in [ 'draft', 'cancel' ]: raise osv.except_osv( _('Warning'), _('You can not reset sales order %s as related Purchase order %s is confirmed.' % (order.name, proc.purchase_id.name))) if proc.production_id and proc.production_id.state not in [ 'new', 'cancel', 'confirmed', 'ready' ]: raise osv.except_osv( _('Warning'), _('You can not reset sales order %s as production started for related Manufacturing order %s.' % (order.name, proc.production_id.name))) for proc in proc_group_id.procurement_ids: for move in proc.move_ids: move_obj.action_cancel(cr, uid, move.id, context=context) proc.cancel() for oline in order.order_line: oline.procurement_ids = False if order.invoice_ids: flag = False for invoice in order.invoice_ids: if invoice.state in [ 'paid', 'open', 'proforma', 'proforma2' ]: raise osv.except_osv( _('Warning'), _('You can not reset this Sale Order as it\'s invoice not in draft' )) if invoice.state in ['draft']: invoice_obj.unlink(cr, uid, [invoice.id], context=context) self.write(cr, uid, order.id, {'state': 'draft'}) line_ids = [] for line in order.order_line: line_ids.append(line.id) order_line_obj.write(cr, uid, line_ids, { 'state': 'draft', 'invoiced': False }) _logger.debug('FGF sale_order trg del %s' % (order.id)) workflow.trg_delete(uid, 'sale.order', order.id, cr) _logger.debug('FGF sale_order trg create %s' % (order.id)) workflow.trg_create(uid, 'sale.order', order.id, cr) pol_fields = po_line_obj.fields_get(cr, uid, context=context) sol_fields = order_line_obj.fields_get(cr, uid, context=context) so_fields = self.fields_get(cr, uid, context=context) if so_fields.has_key('has_limit') and so_fields.has_key('by_pass'): self.write(cr, uid, ids, { 'has_limit': order.partner_id.allow_credit, 'by_pass': False }) if so_fields.has_key('ticket_button_visible'): self.write(cr, uid, ids, {'ticket_button_visible': False}) if so_fields.has_key('ticket_generated'): self.write(cr, uid, ids, {'ticket_generated': False}) if so_fields.has_key('generated_by_admin'): self.write(cr, uid, ids, {'generated_by_admin': False}) if so_fields.has_key('generated_by_oem'): self.write(cr, uid, ids, {'generated_by_oem': False}) if so_fields.has_key('generated_by_admin'): self.write(cr, uid, ids, {'generated_by_admin': False}) if so_fields.has_key('is_mo_created'): self.write(cr, uid, ids, {'is_mo_created': False}) if so_fields.has_key('carrier') and so_fields.has_key( 'method') and so_fields.has_key('ship_ids'): self.write(cr, uid, ids, { 'carrier': '', 'method': '', 'ship_ids': [] }) #Remove SO ref from PO line if ob_sol_to_po installed if pol_fields.has_key('so_ref') and pol_fields.has_key( 'so_line_ref'): po_line_ids = po_line_obj.search(cr, uid, [('so_ref', '=', order.name)], context=context) po_line_obj.write(cr, uid, po_line_ids, { 'so_ref': False, 'so_line_ref': False }, context=context) #Remove PO ref from SO line if ob_sol_to_po installed if sol_fields.has_key('po_ref') and sol_fields.has_key( 'po_line_ref'): for oline in order.order_line: order_line_obj.write(cr, uid, oline.id, { 'po_ref': False, 'po_line_ref': False }, context=context) return True