'Creates an extra move when there is no corresponding original move to be copied'

@api.model
def _prepare_values_extra_move(self, op, product, remaining_qty):

    Uom = self.env['product.uom']
    uom_id = product.uom_id.id
    qty = remaining_qty
    if (op.product_id and op.product_uom_id and (op.product_uom_id.id != product.uom_id.id)):
        if (op.product_uom_id.factor > product.uom_id.factor):
            uom_id = op.product_uom_id.id
            qty = product.uom_id._compute_quantity(remaining_qty, op.product_uom_id, rounding_method='HALF-UP')
    picking = op.picking_id
    ref = product.default_code
    name = ((((('[' + ref) + ']') + '    ') + product.name) if ref else product.name)
    proc_id = False
    for m in op.linked_move_operation_ids:
        if m.move_id.procurement_id:
            proc_id = m.move_id.procurement_id.id
            break
    return {'picking_id': picking.id, 'location_id': picking.location_id.id, 'location_dest_id': picking.location_dest_id.id, 'product_id': product.id, 'procurement_id': proc_id, 'product_uom': uom_id, 'product_uom_qty': qty, 'name': (_('Extra    Move:    ') + name), 'state': 'draft', 'restrict_partner_id': op.owner_id.id, 'group_id': picking.group_id.id}
