Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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)
Example #5
0
    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])
Example #7
0
    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
Example #9
0
    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
Example #12
0
 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'
Example #13
0
 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
Example #14
0
    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
Example #16
0
 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
Example #17
0
 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
Example #19
0
 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
Example #20
0
 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
Example #21
0
 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
Example #22
0
# -*- coding: utf-8 -*-
Example #23
0
# -*- coding: utf-8 -*-
Example #24
0
 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
Example #25
0
 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
Example #26
0
    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